MySQL - 使用一个表中的列(如果存在),或者从另一个表中获取它

时间:2018-06-19 01:59:48

标签: mysql sql join select datatables

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

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

from psycopg2.extras import Json
foo= Json(insertObj.get('foo', None))

我希望单个视图/查询包含table1中的结果(如果存在),如果table1中没有相同的键,则需要来自table2。在此示例中,将包括table1的前4行和表2的后2行:

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  |

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

谢谢!

1 个答案:

答案 0 :(得分: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
                 );