在MySQL中合并表格以保留空值

时间:2018-11-20 13:07:58

标签: mysql

我在下面有两个表格。我正在寻找store中不存在的newidsales2的所有组合,并将它们与sales1组合。

我希望最终结果是:

sales1

原始表

store  newid  amount  total
 123 |  123  | 12.3 |  1
 456 |  123  | 45.6 |  2
 789 |  adsf | 78.9 |  3
 321 |  123f | NULL | NULL 
 789 |  1654 | NULL | NULL

1 个答案:

答案 0 :(得分:1)

  • 我们可以为此使用两个不同的SELECT查询。第一个查询将从sales1表中获取所有行。
  • 第二个将从sales2表中获取其余行,而这些行在sales1表中不存在。我们将使用LEFT JOINsales2的{​​{1}},并只考虑加入之后sales1sales1.id的那些行。
  • 我们最终将使用NULL合并两个查询的结果集。

查询

UNION ALL

结果

SELECT
 s1.store, s1.newid, s1.amount, s1.total 
FROM sales1 s1

UNION ALL 

SELECT
 s2.store, s2.newid, s2.amount, NULL AS total  
FROM sales2 s2
LEFT JOIN sales1 s1
 ON s2.store = s1.store AND 
    s2.newid = s1.newid 
WHERE s1.id IS NULL;

View on DB Fiddle