ОБНОВИТЬ строку таблицы с функцией SELECT и GROUP_CONCAT в sql

У меня есть 3 таблицы в моей базе данных sql.

Это мои таблицы с данными:

table1
ID         WORD
1          a
2          b
3          c
7          o
14         z
32         q
57         i

table2
ID         FORWORD
1          apple
1          orange
3          disc1
3          disc2
3          disc3
14         book
32         letter1
32         letter2
32         letter3
57         keyboard
57         mouse

table3
ROWID      WORD       NAME
1          a          NULL
2          b          NULL
3          c          NULL
4          o          example, example1
5          z          NULL
6          q          window, window1
7          i          NULL

table1 и table2 имеют одинаковый идентификатор. table1 и table3 имеют СЛОВО. Я хочу обновить данные в столбце NAME в таблице 3 и получить результат, как показано ниже:

table3
ROWID      WORD       NAME
1          a          apple, orange
2          b          NULL
3          c          disc1, disc2, disc3
4          o          NULL
5          z          book
6          q          letter1, letter2, letter3
7          i          mouse

Пожалуйста, помогите решить этот вопрос.


person Young Developer    schedule 11.04.2013    source источник
comment
Какой у вас здесь вопрос? Какой запрос не сработал, и в чем точно вы застряли? Если я что-то упустил, это должно быть очень просто.   -  person lc.    schedule 11.04.2013


Ответы (1)


Я думаю, вы ищете UPDATE с JOIN, используя GROUP_CONCAT:

update table3 t3
  join (
    select t1.word, group_concat(t2.forward order by t2.forward separator ', ') name
    from table1 t1
      left join table2 t2 on t1.id = t2.id
    group by t1.word
    ) t on t3.word = t.word
set t3.name = t.name;

Демонстрация скрипки SQL

Обратите внимание, что строка 7 должна возвращать клавиатуру и мышь, поскольку таблица2 имеет 2 записи с 57.

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

person sgeddes    schedule 11.04.2013
comment
благодарю вас. Но что такое т3, т2, т1, т? выдает ошибку: около t3: синтаксическая ошибка - person Young Developer; 11.04.2013
comment
@YoungDeveloper - это просто псевдонимы таблиц - сокращение для полного имени таблицы. Вы просматривали SQL Fiddle? Можете ли вы опубликовать свой запрос/образец данных с ошибкой? - person sgeddes; 11.04.2013
comment
Я выполнил тот же запрос, на который вы ответили. Можно ли сделать запрос без t, t1, t2, t3? Да, я просмотрел SQL Fiddle, я использую sqlite, это проблема? - person Young Developer; 13.04.2013