11

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

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

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

4

5 回答 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”而不是“=”。

于 2012-03-14T18:23:18.103 回答
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来指定您获得的行。

于 2012-03-14T18:14:10.020 回答
1

问题出在您的子查询上:

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

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

于 2012-03-14T18:13:50.793 回答
0
WHERE ID IN (SELECT ID 
                FROM EIGENSCHAFTEN 
                WHERE Kategorie = "BOUNCE" 
                GROUP BY ID
                HAVING COUNT(*) = 1 )
于 2012-03-14T18:13:46.870 回答
0
UPDATE ADRESSEN
SET EMAIL = 0
WHERE ID = (SELECT ID
FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE" 
GROUP BY ID
HAVING COUNT(*) = 1)
于 2012-03-14T18:15:17.360 回答