我有一个需要在MySQL中运行的更新查询,并且遇到了一些麻烦。我花了最后一小时研究SO的解决方案,但找不到真正有效的解决方案。我需要做以下事情:
UPDATE TABLE1 SET ID = (SELECT TABLE2.ID FROM TABLE2, TABLE1
WHERE TABLE1.NAME=TABLE2.NAME) WHERE TABLE1.ID IS NULL
我收到了Error Code: 1242. Subquery returns more than 1 row
错误。如何修改查询以使其成功运行?
基本上,我需要根据条件从另一个表填写一列的所有值的空白。请指导我这个问题。谢谢!
答案 0 :(得分:2)
嗯,听起来你的名字字段不是唯一的。您的子查询匹配多行,因此您需要找到一个唯一的ID来匹配除名称之外的其他ID,否则,如果您只想从子查询中获取第一个结果,请执行以下操作:
UPDATE TABLE1 SET ID = (SELECT TABLE2.ID FROM TABLE2, TABLE1
WHERE TABLE1.NAME=TABLE2.NAME LIMIT 1) WHERE TABLE1.ID IS NULL
答案 1 :(得分:1)
UPDATE TABLE1, TABLE2
SET TABLE1.ID = TABLE2.ID
WHERE TABLE1.ID IS NULL
AND TABLE1.NAME = TABLE2.NAME
应该可以做你想要的,假设{1}在所有名称的TABLE1和TABLE2中都是唯一的。
答案 2 :(得分:0)
SELECT TABLE2.ID FROM TABLE2,TABLE1 WHERE TABLE1.NAME = TABLE2.NAME
此查询返回多行
Your Query:UPDATE TABLE1 SET ID = ( // here setting one value
TABLE1.NAME=TABLE2.NAME // more than one matched records are available
这里设置id,但是当子查询返回多行时,它不能设置一个值