错误代码1242:子查询重新调整多于1行

时间:2018-06-04 09:27:42

标签: mysql sql sql-update subquery

我正在处理更新声明,但我一直收到此错误。任何人都有任何关于如何解决它的建议。我尝试过去一小时内从类似问题中寻找解决方案,但似乎无法让它们发挥作用。这是我的sql statemtent:

UPDATE T_SUBSCRIBERS 
SET FULLNAME=
(SELECT CONCAT (T_REGISTERED_FNAME, T_REGISTERED_LNAME) FROM T_REGISTERED WHERE 
T_REGISTERED_UID = T_SUBSCRIBERS.T_SUBSCRIBERS_UID);

2 个答案:

答案 0 :(得分:0)

**像这样更新你的sql:**

 UPDATE T_SUBSCRIBERS 
SET FULLNAME=
(SELECT CONCAT (T_REGISTERED_FNAME, T_REGISTERED_LNAME) FROM T_REGISTERED WHERE 
T_REGISTERED_UID = T_SUBSCRIBERS.T_SUBSCRIBERS_UID AND ROWNUM = 1);

答案 1 :(得分:0)

您拥有的条件数量超出预期。

您可以通过执行以下操作找到有问题的行:

select T_REGISTERED_UID, count(*)
from T_REGISTERED
group by T_REGISTERED_UID
having count(*) > 1;

如果您只想要一个快速而肮脏的解决方案,请使用limit

UPDATE T_SUBSCRIBERS s
    SET FULLNAME = (SELECT CONCAT(T_REGISTERED_FNAME, T_REGISTERED_LNAME) 
                    FROM T_REGISTERED r 
                    WHERE r.T_REGISTERED_UID = s.T_SUBSCRIBERS_UID
                    LIMIT 1
                   );

但一般情况下,最好不要在不同的表中重复这样的列值。如果需要全名,只需加入T_REGISTERED即可。毕竟,如果用户更新其注册名称会发生​​什么?