MySQL错误:"操作数应该只包含一个列"

11

我在stackoverflow上找到了很多类似的问题,但没有真正解决我的问题。

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

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


您的子查询返回了两列,这是无效的。 - Teja
5个回答

12

问题在于你的内部查询返回了两列。请修改你的查询,如下:

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

这应该能起作用。

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


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 =改为WHERE ID IN,或者限制查询返回的结果数量。限制结果数量的方法取决于你的需求-将LIMIT 1添加到子查询中可行,但你可能想要进行排序或使用MIN/MAX来指定获取哪一行。

1

问题出在你的子查询:

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

你试图将其与ID进行比较,但返回了两列


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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接