如何使用join进行更新

时间:2014-11-30 15:35:57

标签: mysql sql database

以为我有一个如下所示的table1

table1

id  product
2   chocolate
1   chocolate
2   pepsi
3   fanta
2   pepsi
4   chocolate
5   chips
3   pizza
1   coke
2   chips
6   burger
7   sprite
0   pepsi

并希望仅使用mysql

以下面显示的方式排列上表
table2

id  product
0   pepsi
1   chocolate, coke
2   chocolate,fanta,chips
3   fanta,pizza
4   chocolate
5   chips
6   burger
7   sprite

上述事情可以通过

来完成
select id, group_concat(distinct product) as products 
from table1 
group by id 
order by id

之后我希望table2中的product列在另一个名为table3的表中更新,如下所示,这里我想更新table2中的products列作为table3中的thing列和table3中的数字=来自table2的id

table3

number  name      things
0       hi        null
1       hello     null
2       hehe      null
3       wow       null
4       hi        null
5       hi        null
6       hi        null
7       hi        null

我希望最终输出如表2所示

table3

number  name    things
0       hi      pepsi
1       hello   chocolate, coke
2       hehe    chocolate,fanta,chips
3       wow     fanta,pizza
4       hi      chocolate
5       hi      chips
6       hi      burger
7       hi      sprite

2 个答案:

答案 0 :(得分:1)

使用update from select语法。 Check here了解更多信息

UPDATE table3
       JOIN (SELECT id,
                    Group_concat(DISTINCT product) AS products
             FROM   table1
             GROUP  BY id) b
         ON table3.number = b.id
SET    table3.things = b.products 

答案 1 :(得分:1)

您有一个很好的规范化数据结构,并且您想要开始使用以逗号分隔的列表。这是个坏主意。可行,但可能是一个坏主意。

您可以使用update join

update table3 t3 join
       (select id, group_concat(distinct product) as products
        from table1
        group by id
       ) tt
       on t3.number = tt.id
    set t3.things = tt.products;