使用MySQL中的子查询进行更新

时间:2013-03-23 01:01:11

标签: mysql sql-update subquery

我有一个需要在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错误。如何修改查询以使其成功运行?

基本上,我需要根据条件从另一个表填写一列的所有值的空白。请指导我这个问题。谢谢!

3 个答案:

答案 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,但是当子查询返回多行时,它不能设置一个值