2012-03-14 88 views
9

我可以找到很多类似的问题,但对我的问题没有真正的解决方案。MySQL错误“操作数应该包含1列”

我的SQL查询:

UPDATE ADRESSEN 
SET EMAIL = 0 
WHERE ID = (SELECT ID, COUNT(ID) AS COUNTER 
FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE" 
GROUP BY ID 
HAVING COUNTER = 1) 

我收到的错误代码是

#1241 - Operand should contain 1 column(s) 

如果我只是使用它的工作原理,括弧内查询和结果是

ID | COUNTER 
0002159 | 1 

我的错误在哪里? 非常感谢您的帮助。

+0

Ur子查询返回两列,并没有办法有效... – Teja 2012-03-14 18:14:20

回答

0
WHERE ID IN (SELECT ID 
       FROM EIGENSCHAFTEN 
       WHERE Kategorie = "BOUNCE" 
       GROUP BY ID 
       HAVING COUNT(*) = 1) 
1

问题是与你的子查询:

SELECT ID, COUNT(ID) AS COUNTER FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE" GROUP BY ID HAVING COUNTER = 1 

你试图把它比作ID但返回两列

2

你的子查询中包含两列。试试这个:

UPDATE ADRESSEN 
SET EMAIL = 0 
WHERE ID = (SELECT ID 
FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE" 
GROUP BY ID 
HAVING COUNT(ID) = 1) 

我删除COUNT(ID)所以你只能选择ID,并把那不是你的HAVING条款。

此外,除非您确定此查询永远不会返回多行,否则您需要处理重复的可能性。请更改为WHERE ID IN而不是WHERE ID =,或者限制查询返回的结果数量。限制结果的方法将取决于您的要求 - 将LIMIT 1添加到子查询中可行,但您可能需要执行一些排序或使用MIN/MAX来指定您获得的行。

0
UPDATE ADRESSEN 
SET EMAIL = 0 
WHERE ID = (SELECT ID 
FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE" 
GROUP BY ID 
HAVING COUNT(*) = 1) 
10

问题是你的内部查询返回两列。修改您的查询,如

UPDATE ADRESSEN 
SET EMAIL = 0 
WHERE ID = (SELECT ID 
FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE" 
GROUP BY ID 
HAVING COUNT(ID) = 1) 

这应该有效。

我还有一个建议,你确定你的内部查询总是会返回一行吗? 如果您希望为内部查询返回的多个ID设置值为0的EMAIL,我会建议您使用“IN”而不是“=”。

相关问题