SQL - выберите пользователей, которых нет на определенную дату - PullRequest
0 голосов
/ 18 февраля 2019

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

Вот мои таблицы:

USER_TABLE

| ID   | Name     |
-------------------
| 1    | John     |
| 2    | Peter    |
| 3    | Anne     |
| 4    | May      |
ATTENDANCE_TABLE

| ID   | Date       |
--------------------------------
| 2    | 2019-02-16 |
| 2    | 2019-02-17 |
| 2    | 2019-02-18 |
| 3    | 2019-02-17 |
| 4    | 2019-02-18 |

Мне нужно выбрать всех пользователей, которыеотсутствует в «2019-02-18».

Таким образом, результат должен выглядеть следующим образом.

| ID   | Name     |
-------------------
| 1    | John     |
| 3    | Anne     |

Спасибо.

Ответы [ 5 ]

0 голосов
/ 18 февраля 2019
Select UserTable.Id, name
From UserTable left join AttendanceTable
On UserTable.Id=AttendanceTable.Id
Where date! =#2019-02-18#
0 голосов
/ 18 февраля 2019
Drop table if exists my_users;

Create table my_users
(User_ID serial primary key
,Name varchar(100) not null unique
);

Insert into my_users values
(1,'John'),
(2,'Peter'),
(3,'Anne'),
(4,'May');

Drop table if exists my_ATTENDANCE;

Create table my_attendance
(user_ID INT NOT NULL
,Date date not null
,primary key(user_id,date)
);

Insert into my_attendance values
( 2    ,'2019-02-16'),
( 2    ,'2019-02-17'),
(2    ,'2019-02-18'),
(3    ,'2019-02-17'),
(4    ,'2019-02-18');

Select u.*
  From my_users u
  Left
  Join my_attendance a
    On a.user_id = u.user_id
   and a.date = '2019-02-18'
 Where a.user_id is null;

User_ID Name
      3 Anne
      1 John

https://rextester.com/YQZTM12580

0 голосов
/ 18 февраля 2019

Попробуйте этот запрос,

select ID, Name
from USER_TABLE UT
where ID not in (select ID from ATTENDANCE_TABLE where date = '2019-02-18')
0 голосов
/ 18 февраля 2019
select ID, Name 
from USER_TABLE UT 
where ID not in (select ID from ATTENDANCE_TABLE where date = '2019-02-18')
0 голосов
/ 18 февраля 2019

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

SELECT a.id,name 
FROM USER_TABLE a
LEFT JOIN ATTENDANCE_TABLE b ON a.id=b.id
  AND b.date='2019-02-18'
AND b.id IS NULL
...