下午好,我想对SQL查询有疑问。
在示例中,我有三个表:
Table A | Table B | Table AB
表AB
是表A
和B
的结点。
我想知道表A
和B
中的所有内容,而不要表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)
答案 0 :(得分:0)
解决此问题的一种典型方法是使用cross join
和left 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