MySQL采用重复数据并组合唯一数据

时间:2014-05-02 21:40:44

标签: mysql

使用我的MySQL数据库,我想从临时表中获取数据并将其插入到我的主表中,同时删除任何重复数据,同时还要考虑我已有的数据。这似乎需要更新和/或插入,具体取决于" data_table"所以我真的不知道如何写它或者它是否可能。如果这是不可能的,我想知道如何实现这一点,而不考虑已经存在的内容" data_table"我认为这是可能的。谢谢你的帮助!

运行查询前的现有data_table:

data_table

+-----id-----+-----age-----+-----gender-----+-----color-----+
=============+==============+=================+================+
     1              5                m               pink,red,purple

data_table_temp

+-----id-----+-----age-----+-----gender-----+-----color-----+
=============+==============+=================+================+
     1              5                m               red
     2              5                m               blue
     3              5                m               red  
     4              5                m               orange
     5              6                m               red 
     6              6                m               green     
     7              6                m               blue    

查询后:

data_table

+-----id-----+-----age-----+-----gender-----+-----color-----+
=============+==============+=================+================+
     1              5                m               pink,red,purple,blue,orange
     2              6                m               red,green,blue

2 个答案:

答案 0 :(得分:2)

这是解决这个问题的方法,结果比我预期的要困难。

我们的想法是将不匹配的颜色连接在一起并将它们组合在一起。分配ID有一点问题。获得" 2"对于第二行是一个问题,所以这只是按顺序分配id

select @id := @id + 1 as id,
       coalesce(dt.age, dtt.age) as age,
       coalesce(dt.gender, dtt.gender) as age,
       concat_ws(dt.color,
                 group_concat(case when find_in_set(dtt.color, dt.color) > 0
                                   then dtt.color
                              end)
                )
from data_table_temp dtt left outer join
     data_table dt join
     on dt.age = dtt.age and
        dt.gender = dtt.gender cross join
     (select @id := 0) var
group by coalesce(dt.age, dtt.age), coalesce(dt.gender, dtt.gender);

答案 1 :(得分:1)

MySQL没有任何字符串函数(轻松)拆分分隔字符串(如data_table.color)。

但是,如果您拥有data_table_temp格式的所有数据(每行一种颜色),则可以生成如下所需的结果:

SELECT DISTINCT age, GROUP_CONCAT(DISTINCT color)
FROM table WHERE [condition]
GROUP BY age;

根据需要,可选择添加性别。

半答案的道歉