如何不显示两个表中的记录?

时间:2011-04-15 10:28:36

标签: sql oracle join

我有两张桌子,

A1

ID NAME SIGNUP
1  John 14.04.2011
2  Mike 14.04.2011
3  Gabe 14.04.2011
4  Jane 15.04.2011

B1

ID SIGNUP
1  14.04.2011
4  15.04.2011

如何根据ID和SIGNUP仅获取左表(A)中但不在右表(B)中的那些记录?我正在寻找的结果是:

ID NAME
2  Mike
3  Gabe

这是我提出的查询,但它没有给出所需的结果:

SELECT A1.ID, A1.NAME
FROM A1 
LEFT JOIN B1 ON A1.SIGNUP=B1.SIGNUP
AND A1.ID<>B1.ID 
WHERE A1.SIGNUP=TO_DATE('14.04.2011','DD.MM.YYYY')

5 个答案:

答案 0 :(得分:6)

SELECT a.*
 FROM a LEFT JOIN b USING (signup) 
 WHERE b.id IS NULL AND *signup thingie*;

虽然这是选择不匹配的行的方法,但我不知道您希望如何从这些表中获得所需的结果,我相信您错过了插图中的内容。

答案 1 :(得分:3)

MINUS节省了一天:

SELECT A1.ID, A1.NAME
FROM A1 
MINUS
SELECT A1.ID, A1.NAME
FROM A1 
JOIN B1 ON A1.SIGNUP=B1.SIGNUP

答案 2 :(得分:1)

您可以尝试使用:

SELECT A1.ID, A1.NAME
FROM A1 
WHERE A1.ID not in (SELECT B1.ID FROM B1)
AND A1.SIGNUP=TO_DATE('14.04.2011','DD.MM.YYYY')

答案 3 :(得分:1)

如果A1和B1中相应ID的注册总是相同,那么它就是:

select a1.id,a1.name,
from a1
left join b1
on b1.id=a1.id
where b1.id is null

答案 4 :(得分:0)

SELECT  a1.*
FROM    a1
WHERE   (id, signup) NOT IN
        (
        SELECT  id, signup
        FROM    b1
        )
        AND signup = TO_DATE('14.04.2011', 'DD.MM.YYY')