SQL自联接,并在第三个联接上按条件获取记录



我有一个查询,在"Id1"one_answers"Id2"上对TableA执行自联接。然后我在表B上进行内部联接。自联接为2个键(Id1,Id2(的表。我正在尝试获取与表3中的Id不匹配的记录。这是我需要在联接上添加的条件吗?谢谢

SELECT *
FROM TableA t1
JOIN TableA t2 ON t1.Id1 = t2.Id2
JOIN TableB t3 ON t1.Id1 = t3.Id

编辑:

SELECT *
FROM UCDetails ucd1
JOIN MS et ON ucd1.UKey = TRY_CAST(et.SubKey AS bigint)
JOIN dbo.UCDetails ucd2 ON ucd1.UKey = ucd2.ETTSubkey 
WHERE ucd1.ETTSubkey IS NULL

对不起,我应该更具体一点,所以这是问题所在。我只想从ucd1或ucd2中获取记录,如果ucd1 ETTSubkey为NULL,并且"UKey"与"et.Subkey"不匹配。我可以通过此联接提取记录,但我只想在与et表上的"Subkey"不相匹配的地方获取"UCD"记录。

如果要在tableB中任一id不匹配的行,请使用not exists:

select a.*
from tableA a
where not exists (select 1
from tableB b
where b.id = a.id1
) or
not exists (select 1
from tableB b
where b.id = a.id2
) ;

我正在尝试获取与中的Id不匹配的记录表3

如果匹配的意思是TableBId等于TableA中的Id1Id2,那么您只需要一个过滤掉匹配行的LEFT联接:

SELECT a.*
FROM TableA a LEFT JOIN TableB b
ON b.Id IN (a.Id1, a.Id2)
WHERE b.Id IS NULL

最新更新