内联接更新语句抛出错误

时间:2014-11-20 19:13:31

标签: mysql plsql

我有这样的事情:

UPDATE table set new_id=(SELECT distinct t2.new_id
FROM table t1
inner join (SELECT hn.id,max(hn.id) OVER (PARTITION BY first_name,MIDDLE_NAME,last_name) AS new_id
from table)t2
on t1.id=t2.id);

这个查询给我一个错误,说明单行子查询返回多行。

请帮我解释如何更新new_id值的语法

1 个答案:

答案 0 :(得分:0)

错误告诉您确切的问题:"子查询返回多行":

UPDATE table set new_id=(SELECT distinct t2.ne
                       ^---

子查询可以/将返回多行,并且由于您在相等上下文(=)中使用它,因此不会被执行。如果返回多个不同的值/行,则必须使查询真正返回一行/一个值,或切换到IN查询。 IN选项无法使用,因为您在UPDATE中使用了多个值,因此将子查询限制为单行是您唯一的选择。