子查询返回多个值...在SQL查询中,这意味着什么?,有什么问题?

时间:2014-05-27 21:54:38

标签: sql sql-server

如果查询似乎正确,为什么我收到此消息: "子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。 该语句已终止。 " 但是,当我尝试分割的查询时,它的工作正常,我的意思是,会发生什么?

这是查询:

UPDATE llantas_dictamen_scrap
   SET clave_operador =
       (SELECT REPLACE(scrap, '-', '') as clave_operador
          FROM (SELECT RIGHT(clave_operador, CHARINDEX('-',REVERSE(clave_operador), 1)) as scrap
                  FROM llantas_dictamen_scrap) t
       )

当然,我回复了多个值,这应该是什么意思?

4 个答案:

答案 0 :(得分:0)

您要将单个列值设置为等于多个列值。如果要使用相同的查询进行更新,则必须指定要使用的列。如果您指定选择前1 ...按顺序,那么应为您的更新语句提供可用的单个子查询结果。

答案 1 :(得分:0)

好吧,如果你有 表A

  

Col A Col B Col C
  1个2 3
  1个2 3

你试试

  

更新表A 设置 Col B =(选择5联合选择6)

我们不知道是否需要将B列设置为5或6,因此我们收到错误。

您需要确保您的子查询只返回一个值,一种简单的方法是对子查询执行以下操作(请注意前1)。

SELECT Top 1 REPLACE(scrap, '-', '')as clave_operador FROM (SELECT RIGHT(clave_operador, CHARINDEX('-',REVERSE(clave_operador),1))as scrap FROM llantas_dictamen_scrap)t

答案 2 :(得分:0)

UPDATE llantas_dictamen_scrap
SET clave_operador = RIGHT(clave_operador, CHARINDEX('-',REVERSE(clave_operador), 1) -1)
WHERE CHARINDEX('-',clave_operador, 1) > 0

这个调整RIGHT的调整位置,不包括我们找到的' - '。没有必要调用REPLACE,因为一旦我们知道了最后一个尾随' - '的位置,我们就可以通过取最右边的字符(其位置为-1)来排除。

您无法为单行返回多个值。你正在更新多行,是的,对于FOR EACH ROW,你给clave_operador一个值。

答案 3 :(得分:0)

这意味着什么消息java.lang.ClassNotFoundExeption:com.mysql.jdbc.Driver 这是我在jform中的代码 private void saveActionPerformed(java.awt.event.ActionEvent evt){

String Number  = txt_idinf.getText();
String Name  = txt_Name.getText();
String Birthdate  = txt_Birthdate.getText();
String Cas  = txt_Cas.getText();
String Helth  = txt_Helth.getText();
String Sourc  = txt_Sourc.getText();
String Children  = txt_Children.getText();
String Adresse  = txt_Adresse.getText();
String PhoneNumber  = txt_PhoneNumber.getText();
String Demande  = txt_Demande.getText();
String Procédurs  = txt_Procédurs.getText();
Connection conn = null;
PreparedStatement pstm = null;
try{
Class.forName ("com.myql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost/infocarte","root","root");
pstm = conn.prepareStatement("insert into information values (?,?,?,?,?,?,?,?,?,?,?)");
pstm.setString(1, Number);
pstm.setString(2, Name);
pstm.setString(3, Birthdate);
pstm.setString(4, Cas);
pstm.setString(5, Helth);
pstm.setString(6, Sourc);
pstm.setString(7, Children);
pstm.setString(8, Adresse);
pstm.setString(9, PhoneNumber);
pstm.setString(10, Demande);
pstm.setString(11, Procédurs);
int i = pstm.executeUpdate();
if (i>0){
JOptionPane.showMessageDialog(null, "تم حفظ البيانات");
}
else{
 JOptionPane.showMessageDialog(null, "خطأ في حفظ البيانات");   
}}

catch(Exception e){
JOptionPane.showMessageDialog(null,e);  
}

}                                    
相关问题