【问题标题】:Mysql: Merging two similar tables with overlapping unique columnsMysql:合并两个具有重叠唯一列的相似表
【发布时间】:2021-07-15 01:00:30
【问题描述】:

我已经编译了两个表,其中包含来自不同来源(A 和 B)的植物名称,我想将它们合并到第三个表 (C) 中。表 A 和 B 都使用物种名称作为唯一值,并且还包含荷兰名称。像这样:

SPECIES           | DUTCH NAME
Ligustrum vulgare | Wilde liguster
Linaria vulgaris  | Vlasbekje
Linnaea borealis  | Linnaeusklokje  

我想合并这些表,但它们有很多共同点。我想将 A 优先于 B,并且仅在 B 有 A 缺乏的物种时才添加到 A。但是,如果 A 中的某个物种没有荷兰名称,那么我想添加 B 中的荷兰名称(如果有的话)。新表中的物种列也设置为唯一。

我敢打赌,这需要通过 UNION 来完成,并且我确实四处寻找示例,但我想我有点太脑残了,无法理解它。我该怎么办? 提前致谢!

【问题讨论】:

    标签: mysql merge union


    【解决方案1】:
    INSERT INTO c (species, dutch)
    SELECT species, COALESCE(a.dutch, b.dutch)
    FROM ( SELECT species FROM a
           UNION 
           SELECT species FROM b ) AS all_species
    LEFT JOIN a USING (species)
    LEFT JOIN b USING (species);
    

    https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=7f2dea9f56071c4dc0dd9abc93360624

    【讨论】:

    • 关闭!它确实跳过了 B 中的物种已经在 A 中的情况,并添加了额外的 B。但是当添加来自 B 的物种时,它不包括 de Dutch name。因此,如果记录来自 A,我会看到“Abies amabilis | Pacifische zilverspar”,当它来自 B 时,我会看到“Abies amabilis 'Spreading Star'|”。
    • @DiederikSlob 是的。我没有考虑到 2nd NATURAL JOIN 将加入 2 列。答案更正,小提琴添加。检查 - 也许某些组合被跳过?
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2018-10-16
    • 2021-10-29
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 2019-04-03
    相关资源
    最近更新 更多