通过为不能从合并表中派生值的列插入空值来合并表?

时间:2010-02-27 10:01:03

标签: sql mysql

我有两个不同的表,我决定将它们合并到一个表中......

出生表格

  

id,name,country,birthday_date,   说明,链接

死亡表格

  

id,name,country,death_date,   说明,链接

我希望将它们合并到一个具有结构

的表中
  

id,name,country,bdate,ddate,   说明,链接。

每个表的链接都有一个唯一的值,所以我必须使用链接合并表。我尝试了很多查询但导致了错误的结果。

出生和死亡表都可以有相同的名称,有些名字可能只出生在死亡或死亡表中。

如果那时,我如何合并它们并更新两个旧表中任何一个都没有值的列的空日期?

1 个答案:

答案 0 :(得分:2)

假设您的新idAUTO_INCREMENT此解决方案使用CROSS JOINCOALESCE应该适合您。如果在name中可用,countrydescriptiondeath 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
                   )
)