我有两个不同的表,我决定将它们合并到一个表中......
出生表格
id,name,country,birthday_date, 说明,链接
死亡表格
id,name,country,death_date, 说明,链接
我希望将它们合并到一个具有结构
的表中id,name,country,bdate,ddate, 说明,链接。
每个表的链接都有一个唯一的值,所以我必须使用链接合并表。我尝试了很多查询但导致了错误的结果。
出生和死亡表都可以有相同的名称,有些名字可能只出生在死亡或死亡表中。
如果那时,我如何合并它们并更新两个旧表中任何一个都没有值的列的空日期?
答案 0 :(得分:2)
假设您的新id
有AUTO_INCREMENT
此解决方案使用CROSS JOIN
和COALESCE
应该适合您。如果在name
中可用,country
,description
和death
birth
将被忽略。
INSERT INTO new_table ( name, country, bdate, ddate, description, link )
(
SELECT
COALESCE(b.name, d.name),
COALESCE(b.country, d.country),
b.birthday_date,
d.death_date,
COALESCE(b.description, d.description),
COALESCE(b.link, d.link)
FROM birth b
CROSS JOIN death d ON ( d.link = b.link )
)
或者,插入birth
:
INSERT INTO new_table ( name, country, bdate, ddate, description, link )
(
SELECT name, country, birthday_date, NULL, description, link
FROM birth
)
然后使用`death_date'更新这些行(如果可用):
UPDATE new_table nt
SET ddate = (SELECT death_date FROM death d WHERE d.link = nt.link )
最后,添加death
中没有birth
条目的所有行:
INSERT INTO new_table ( name, country, bdate, ddate, description, link )
(
SELECT name, country, NULL, death_date, description, link
FROM death d
WHERE NOT EXISTS ( SELECT NULL
FROM new_table
WHERE link = d.link
)
)