我有两张桌子,
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')
答案 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')