MySQL错误“操作数应包含1列”

时间:2012-03-14 18:11:34

标签: mysql operand mysql-error-1241

我可以找到很多类似的问题,但对我的问题没有真正的解决方案。

我的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

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

5 个答案:

答案 0 :(得分:11)

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

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

这应该有效。

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

答案 1 :(得分: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指定哪一行得到。

答案 2 :(得分:1)

问题在于您的子查询:

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

您正在尝试将其与ID进行比较,但正在返回两列

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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