MySQL 错误"Operand should contain 1 column"



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

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

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

问题是内部查询返回两列。像一样修改您的查询

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

这应该行得通。

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

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

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来指定您得到的行。

问题出在子查询上:

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

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

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

相关内容

  • 没有找到相关文章

最新更新