2013-05-21 4 views
0

Я очень новичок в MySQL, ребята, пожалуйста, помогите мне в этом?Подзапрос возвращает более 1 строки, Ошибка 1242

Запрос:

UPDATE users u, 
     posts p 
SET u.tags = (SELECT group_concat(Tags) 
       FROM (SELECT DISTINCT Tags, 
             user_id 
         FROM posts 
         GROUP BY tags, 
            user_id) AS p 
       GROUP BY user_id) 
WHERE u.user_id = p.user_id; 

Ошибка:

ERROR 1242 (21000): Subquery returns more than 1 row 
+3

Похоже, что ваш подзапрос возвращает более одной строки, в то время как он ожидает только одного. Попробуйте запустить подзапрос самостоятельно и посмотреть, ожидаются ли результаты. – Mike

+0

Внутренний запрос, возвращающий несколько записей на основе user_id –

ответ

1

Вам нужен связанный подзапрос:

update users u 
    set u.tags =(select group_concat(Distinct Tags) 
       from posts p 
       where p.user_id = u.user_id 
       group by user_id) 

я не уверен, что делает ваш запрос. У него есть соединение снаружи, что не нужно. Он группируется по тегам и user_id внутри, с ненужным ключевым словом distinct. Подзапрос производит другое значение для each user_id, поэтому неудивительно, что вы получаете ошибку слишком большого количества возвращенных строк. Оператор set может иметь только одно значение.

+0

Большое спасибо за сохранение ... –

Смежные вопросы