【问题标题】:MySQL - Use column from one table if it exists, or else take it from another tableMySQL - 如果存在一个表中的列,则使用它,否则从另一个表中获取它
【发布时间】:2018-06-19 01:59:48
【问题描述】:

我正在寻找可以执行以下操作的 MySQL 查询。

我有 2 个结构相同的表,其中键是前 4 个字段:

Table 1:
|   DATE    |  TYPE  |  CITY  |  ID   |  AMOUNT |
|2018-01-01 |  SALE  |  NYC   |  001  |  10.00  |
|2018-01-05 |  PURCH |  LA    |  002  |  15.00  |
|2018-01-08 |  SALE  |  LA    |  001  |  17.00  |
|2018-02-09 |  PURCH |  NYC   |  002  |  12.00  |

Table 2:
|   DATE    |  TYPE  |  CITY  |  ID   |  AMOUNT |
|2018-01-01 |  SALE  |  NYC   |  001  |  11.00  |
|2018-01-05 |  PURCH |  LA    |  002  |  14.00  |
|2018-01-08 |  SALE  |  LA    |  001  |  16.00  |
|2018-02-09 |  PURCH |  NYC   |  002  |  13.00  |
|2018-05-01 |  SALE  |  WASH  |  004  |  11.00  |
|2018-08-08 |  SALE  |  NYC   |  001  |  12.00  |

我想要一个单一的视图/查询,如果它存在则来自 table1 的结果,如果它在 table1 中不存在,则来自 table2 的结果具有相同的键。在此示例中,将包含 table1 的前 4 行和 table 2 的后 2 行:

|   DATE    |  TYPE  |  CITY  |  ID   |  AMOUNT |
|2018-01-01 |  SALE  |  NYC   |  001  |  10.00  |
|2018-01-05 |  PURCH |  LA    |  002  |  15.00  |
|2018-01-08 |  SALE  |  LA    |  001  |  17.00  |
|2018-02-09 |  PURCH |  NYC   |  002  |  12.00  |
|2018-05-01 |  SALE  |  WASH  |  004  |  11.00  |
|2018-08-08 |  SALE  |  NYC   |  001  |  12.00  |

表 2 不一定包含表 1 中的所有键,因此表 2 上的左连接不起作用。

谢谢!

【问题讨论】:

    标签: mysql sql join select datatables


    【解决方案1】:

    这很容易通过union allnot exists 完成:

    select t1.*
    from table1 t1
    union all
    select t2.*
    from table2 t2
    where not exists (select 1
                      from table1 t1
                      where t1.date = t2.date and
                            t1.type = t2.type and
                            t1.city = t2.city and
                            t1.id = t2.id
                     );
    

    【讨论】:

      猜你喜欢
      • 2021-09-16
      • 2018-08-20
      • 1970-01-01
      • 2020-05-18
      • 2016-01-19
      • 2022-01-22
      • 2022-01-24
      • 2014-01-31
      • 2021-12-14
      相关资源
      最近更新 更多