Код ошибки 1242: Подзапрос возвращает более 1 строки - PullRequest
0 голосов
/ 04 июня 2018

Я работаю над оператором обновления, но продолжаю получать эту ошибку.У любого есть совет, как это исправить.В течение последнего часа я пытался найти решения по схожим вопросам, но не могу заставить их работать.Вот мой 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 голосов
/ 04 июня 2018

У вас больше строк, которые соответствуют условиям, чем вы ожидаете.

Вы можете найти поврежденные строки, выполнив:

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.В конце концов, что произойдет, если пользователь обновит свое регистрационное имя?

0 голосов
/ 04 июня 2018

** Обновите свой 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...