sql - 从按两列分组的两个表中选择不匹配的行
问题描述
我有两个包含不同行数的销售信息的表,我想获取这些行。需要注意的重要一点是,记录是通过两列的键添加到表中的:sale_type
和sale_date
。
所以我认为我应该在将两个表合并后按这些列分组。并按计数过滤。但我目前的解决方案不起作用。我应该如何正确获取不匹配的记录?
这是我尝试过的:
SELECT * FROM
(SELECT * FROM sales_copy
UNION ALL
SELECT * FROM sales)
GROUP BY sale_type, sale_date
HAVING count(*)!=1;
解决方案
为了选择两个表之间的差异,我已经成功地使用完全连接来做到这一点。所以在你的情况下,你会想要这样的东西:
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
推荐阅读
- swift - 如何关闭导航控制器?
- android - 在 PreferenceScreen 和 Code 中共享设置名称和默认值
- ios - 是否多次完成导航加载
- python-3.x - 如何在 pandas 数据框中的多个列上执行分组并在 python 中使用 fbProphet 预测未来值?
- c - 我需要帮助在 C 中从中缀转换为后缀
- laravel - Laravel:REJECT ROUTE 未定义但存在于 web.php 中
- php - PHP 代码没有从数据库中获取正确的值
- sql - 将值插入表中
- c# - 数据未显示在 C# 和 SQL Server 中的复选框上
- git - 强制 git 识别文件已重命名,更改后