sql - 查询在没有主键的两个表中查找不匹配的记录
问题描述
我想使用完全外连接和 where 子句(下面写的查询)从两个表(如下所示)中选择不匹配的记录。这两个表都没有主键。我认为由于外部连接,我得到了结果中的所有 3 条记录。有没有办法通过修改查询只返回不匹配的记录?(即第三条记录)。
表格1:
表2:
使用的查询:
DECLARE @table1 TABLE (element_type varchar(100),element_code varchar(100), value varchar(100))
DECLARE @table2 TABLE (element_type varchar(100),element_code varchar(100), value varchar(100))
Insert into @table1
values
('ABC', 'CODE1', 'Interest Due'),
('ABC', 'CODE1', NULL),
('BCD', 'CODE2', 'value1')
Insert into @table2
values
('ABC', 'CODE1', 'Interest Due'),
('ABC', 'CODE1', NULL),
('BCD', 'CODE2', 'value2')
SELECT
[Element Type] = ISNULL(m1.element_type, m2.element_type),
[Differences] = 'value missmatch'
FROM
@table1 m1
FULL OUTER JOIN @table2 m2
ON m1.element_type = m2.element_type AND m1.element_code = m2.element_code
WHERE
ISNULL(m1.value, '') <> ISNULL(m2.value, '')
输出:
期望的输出:
解决方案
WITH result AS (
(SELECT * FROM @table1 UNION SELECT * FROM @table2)
EXCEPT
(SELECT * FROM @table1 INTERSECT SELECT * FROM @table2)
)
SELECT DISTINCT element_type, element_code, 'value missmatch' AS Differences
FROM result;
推荐阅读
- javascript - ImageMapType Typescript 中的授权标头
- c# - 根据另一个自动完成文本框的选定文本填充文本框 c# winforms
- javascript - Express.js:指定根路由会破坏静态文件解析
- php - 调用get Followers/following api时如何将相互关注者/关注者放在数组顶部?
- javascript - 单选按钮的html&js vadilation
- flutter - 如何在颤动中打印“用户”实例中的值?
- rx-swift - RxSwift 处理一个订阅调用处理另一个订阅
- azure - Azure Ubuntu VM,即使禁用了 ufw 并为此端口添加了入站规则,也无法访问端口 8080
- python - selenium/python 我无法在下拉列表中选择一个项目
- javascript - 检查jquery中的复选框