SQL查询(JOIN?)

时间:2018-11-07 15:15:40

标签: sql sql-server join

下午好,我想对SQL查询有疑问。

在示例中,我有三个表:

Table A | Table B | Table AB

AB是表AB的结点。

我想知道表AB中的所有内容,而不要AB中的所有内容。

对不起,英语为“ Google翻译”

  

[编辑]

按照提示操作,要获得表A和表B中没有的内容,而表AB中没有的所有结果会是这样吗?

PS:我现在不能测试,我在地铁上

SELECT A.ID, B.ID 
FROM TABLE A (NOLOCK), TABLE B (NOLOCK)
WHERE A.ID = B.ID
AND NOT EXISTS (SELECT 1 FROM TABLE AB (NOLOCK) 
                WHERE A.ID = AB.ID)
AND NOT EXISTS (SELECT 1 FROM TABLE AB (NOLOCK) 
                WHERE B.ID = AB.ID)

2 个答案:

答案 0 :(得分:0)

解决此问题的一种典型方法是使用cross joinleft join

select a.*, b.*
from a cross join
     b left join
     ab
     on a.a_id = ab.a_id and b.b_id = ab.b_id
where ab.a_id is null;

答案 1 :(得分:0)

在大多数情况下,我会使用左外部联接而不是EXISTS,

类似的东西:

SELECT a.* 
FROM TABLE_A a
LEFT OUTER JOIN TABLE_AB ab on ab.ID = a.ID
WHERE ab.ID IS NULL

UNION 

SELECT b.*
FROM TABLE_B b
LEFT OUTER JOIN TABLE_AB ab on ab.ID = b.ID
WHERE ab.ID IS NULL