как использовать объединения объединений для нескольких таблиц, а затем отфильтровать их с помощью WHERE - PullRequest
0 голосов
/ 04 мая 2019

У меня есть следующие таблицы: empl, sug1, sug2.

empl имеет имена сотрудников, столбец идентификаторов. У sug1 и sug2 есть предложения, связанные с идентификатором пользователя из таблицы empl.

empl
id   name
1    bob smith
2    jack smith
3    barbara jones
4    barbara jones
5    david noodles
6    mark mcmark

sug1
id    UserId    suggestion                  date
1     2         dont run with eyes closed   01/01/2018

sug2
id    UserId   suggestion                   date
1     4        always walk                 01/01/2019
2     6        jump over rope               02/01/2019

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

select distinct name from empl 
where empl.id not in 
(select sug1.UserId from sug1
    UNION select sug2.UserId from sug2 
    UNION select ......
;

2) второй аспект, к которому я пытаюсь добраться, - это показать мне список уникальных пользователей, которые не имели ни одной записи в таблицах sug за последние ~ 90 дней (> = '01 / 01/2019 ' )

1 Ответ

0 голосов
/ 04 мая 2019

Используйте not exists!

select e.*
from emp e
where not exists (select 1
                  from sug1 s1
                  where s1.userid = e.id
                 ) and
      not exists (select 1
                  from sug2 s2
                  where s2.userid = e.id
                 );

Вы можете добавить:

and date >= current_date - interval '90 day'

, если хотите ограничить временные рамки.

...