使用我的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
答案 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;
根据需要,可选择添加性别。
半答案的道歉