我正在寻找可以执行以下操作的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上的左连接不起作用。
谢谢!
答案 0 :(得分:1)
使用union all
和not 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
);