繁体   English   中英

通过为无法从合并表派生任何值的列插入空值来合并表?

[英]Merge tables by inserting null values for columns where no value can be derived from the merging tables?

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

出生表有

ID,名称,国家/地区,生日日期,描述,链接

死亡表有

ID,名称,国家/地区,死亡日期,描述,链接

我想将它们合并到具有结构的单个表中

ID,名称,国家/地区,日期,日期,说明,链接。

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

出生表和死亡表都可以具有相同的名称,并且某些名称可能只在出生表或死亡表中出现。

如果是的话,我该如何合并它们并更新两个旧表中没有值的列的空日期?

假设您的新id具有AUTO_INCREMENT则使用CROSS JOINCOALESCE解决方案将为您工作。 death时的namecountrydescription (如果有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
                   )
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM