组合mySQL中的表以保留null



下面有两个表。我正在寻找sales2中不存在于sales1中的storenewid的所有组合,并将它们与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

原始表格

CREATE TABLE sales1 (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
store  VARCHAR(30) NOT NULL,
newid VARCHAR(30),
amount DOUBLE,
total INT
);
CREATE TABLE sales2 (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
store  VARCHAR(30) NOT NULL,
newid VARCHAR(30),
amount DOUBLE
);
INSERT INTO sales1 (store, newid, amount, total) VALUES
('123','123', 12.3, 1),('456','123', 45.6, 2),('789','adsf', 78.9, 3);
INSERT INTO sales2 (store, newid, amount) VALUES 
('123','123', Null),('456','123', Null),('321','123f', Null),('789','1654', Null);
  • 我们可以为此使用两个不同的SELECT查询。第一个查询将从sales1表中获取所有行
  • 第二种方法是从sales2表中提取剩余的行,这些行在sales1表中不存在。我们将使用从sales2sales1LEFT JOIN,并且只考虑在Join之后sales1.idNULL的那些行
  • 我们最终将使用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;

结果

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

查看DB Fiddle

最新更新