Как НЕ отображать записи, которые есть в обеих таблицах? - PullRequest
1 голос
/ 15 апреля 2011

У меня есть две таблицы:

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

Какя могу выбрать только те записи, которые находятся в левой таблице (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 ]

6 голосов
/ 15 апреля 2011
SELECT a.*
 FROM a LEFT JOIN b USING (signup) 
 WHERE b.id IS NULL AND *signup thingie*;

, хотя это способ выбора строк, которые не соответствуют друг другу. Я не понимаю, как вы хотите получить желаемый результат из этих таблиц, я полагаю, что вы что-то упустили на своей иллюстрации.

3 голосов
/ 15 апреля 2011

МИНУС спасает день:

SELECT A1.ID, A1.NAME
FROM A1 
MINUS
SELECT A1.ID, A1.NAME
FROM A1 
JOIN B1 ON A1.SIGNUP=B1.SIGNUP
1 голос
/ 15 апреля 2011

Если регистрация для соответствующих идентификаторов в A1 и B1 всегда одинакова, то это просто:

select a1.id,a1.name,
from a1
left join b1
on b1.id=a1.id
where b1.id is null
1 голос
/ 15 апреля 2011

Вы можете попробовать использовать:

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')
0 голосов
/ 15 апреля 2011
SELECT  a1.*
FROM    a1
WHERE   (id, signup) NOT IN
        (
        SELECT  id, signup
        FROM    b1
        )
        AND signup = TO_DATE('14.04.2011', 'DD.MM.YYY')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...