【发布时间】:2021-07-22 09:11:24
【问题描述】:
我想使用完全外连接和 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, '')
输出:
期望的输出:
【问题讨论】:
-
我希望这会返回五条记录。如果您将示例数据作为插入语句包含在内,这个问题会更好
-
根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
-
@Nick.McDermaid - 我已经用插入语句更新了查询。
-
我能想到的唯一方法是找到所有完全匹配的记录,然后将它们从不匹配过程中排除。
-
这基本上是一个
EXCEPT ALL查询,但 SQL Server 不支持该语法
标签: sql sql-server tsql