2013-04-11 22 views
0

我在我的sql數據庫中有3個表格。在SQL中使用SELECT和GROUP_CONCAT函數更新表格行

這是我的一個數據表:

 
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 

Table 1和Table具有相同的ID。 table1和table3有WORD。 我要更新表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 

請幫助解決這個問題。

+0

你在這裏有什麼問題?你嘗試過哪些查詢不起作用,以及哪些*恰好*卡住了?除非我錯過了一些東西,否則這應該是非常簡單的。 – 2013-04-11 01:10:17

回答

1

我認爲你正在尋找一個UPDATEJOIN,使用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 Fiddle Demo

請注意,第7行應該返回鍵盤,鼠標作爲表2有2條57。

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

+0

謝謝。但是t3,t2,t1,t是什麼?它給出了一個錯誤:「接近t3:語法錯誤」 – 2013-04-11 16:18:59

+0

@YoungDeveloper - 這些只是表別名 - 對整個表名稱的簡寫。你看過SQL小提琴嗎?你能發佈你的查詢/示例數據和錯誤嗎? – sgeddes 2013-04-11 19:02:56

+0

我已經執行了相同的查詢,你已經回答。沒有t,t1,t2,t3可以查詢嗎?是的,我已經看過SQL小提琴,我正在使用sqlite,這是一個問題嗎? – 2013-04-13 15:44:19