0

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

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

4

3 回答 3

2

好吧,听起来您的姓名字段不是唯一的。您的子查询匹配多行,因此您需要找到一个唯一的 id 来匹配名称以外的其他内容,或者,如果您只想从子查询中获取第一个结果,请执行以下操作:

UPDATE TABLE1 SET ID = (SELECT TABLE2.ID FROM TABLE2, TABLE1 WHERE TABLE1.NAME=TABLE2.NAME LIMIT 1) WHERE TABLE1.ID IS NULL

于 2013-03-23T04:48:15.187 回答
1
UPDATE TABLE1, TABLE2 
  SET TABLE1.ID = TABLE2.ID
  WHERE TABLE1.ID IS NULL
  AND TABLE1.NAME = TABLE2.NAME

NAME假设所有名称在 TABLE1 和 TABLE2 中都是唯一的,可能应该做你想做的事。

于 2013-03-23T04:37:33.683 回答
0

从 TABLE2、TABLE1 中选择 TABLE2.ID,其中 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,但是子查询返回多行时不能设置一个值

于 2013-03-23T01:05:44.003 回答