首页 > 解决方案 > 从按两列分组的两个表中选择不匹配的行

问题描述

我有两个包含不同行数的销售信息的表,我想获取这些行。需要注意的重要一点是,记录是通过两列的键添加到表中的:sale_typesale_date

所以我认为我应该在将两个表合并后按这些列分组。并按计数过滤。但我目前的解决方案不起作用。我应该如何正确获取不匹配的记录?

这是我尝试过的:

SELECT * FROM
(SELECT * FROM sales_copy
UNION ALL  
SELECT * FROM sales)
GROUP BY sale_type, sale_date
HAVING count(*)!=1;

标签: sqlpostgresql

解决方案


为了选择两个表之间的差异,我已经成功地使用完全连接来做到这一点。所以在你的情况下,你会想要这样的东西:

SELECT S.*, SC.*
FROM sales AS S
FULL JOIN sales_copy AS SC ON (S.sale_type = SC.sale_type) AND (S.sale_date = 
SC.sale_date
WHERE (S.sale_type IS NULL AND S.sale_date IS NULL) OR (SC.sale_type IS NULL AND 
SC.sale_date IS NULL)

这样做的结果将只选择一个表中的所有行,而忽略两个表中的行。

在此处查看实际操作:SQL Fiddle


推荐阅读