2013-07-06 3 views
0

У меня есть таблица в MySQL, в которой перечислены все сотрудники. У меня есть другой, где перечислены все сотрудники, которые должны работать в определенный день. И теперь я хочу выбрать всех сотрудников, которые имеют бесплатные (или, по крайней мере, НЕ перечислены в рабочем столе). В этом fiddle вы можете увидеть мою схему.Выделить все, что отсутствует в таблице

Код типа SELECT * FROM pf_mitarbeiter WHERE NOT LISTED AS employeeID IN pf_tagesplan_zuteilungen будет супер потрясающим. Но я принимаю и другие версии.

Спасибо, ребята!

ответ

2

Используйте LEFT JOIN присоединиться pf_tagesplan_zuteilungen на employeeID с условием, что нет ни одной строки, соответствующие pf_mitarbeiter:

SELECT t1.* 
    FROM pf_mitarbeiter t1 
    LEFT JOIN pf_tagesplan_zuteilungen t2 ON t2.employeeID = t1.ID AND t2.date = CURDATE() 
    WHERE t2.ID IS NULL 
+0

Если я ставлю этот запрос 'SELECT, t1. * FROM pf_mitarbeiter t1 LEFT JOIN pf_tagesplan_zuteilungen t2 ON t2.employeeID = t1.ID WHERE t2.ID IS NULL И t2.date = CURDATE()' в базе данных , он ничего не выбирает .. но он должен выбрать всех сотрудников, потому что сегодня никто не должен работать. –

+1

Я думаю, это потому, что у вас уже есть записи в 'pf_tagesplan_zuteilungen' для всех сотрудников за последние дни. В этом случае нам нужно добавить другое условие на 'pf_tagesplan_zuteilungen.date' в предложение' ON'. Я обновил свой ответ на примере. – esycat

+0

Ты мой герой. Он работает сейчас. Большое спасибо! –

1
select * 
from A 
where not exists 
(
    select 1 
    from B 
    where a.key = b.key 
) 
0

Использовать LEFT OUTER JOIN для объединения двух таблиц. Таким образом, вы можете выбрать все строки из таблицы pf_mitarbeiter, даже если в таблице pf_tagesplan_zuteilungen нет соответствующей строки.

SELECT 
    S.* 
FROM 
    pf_mitarbeiter S 
    LEFT OUTER JOIN pf_tagesplan_zuteilungen T ON (S.ID = T.employeeID) 
WHERE 
    T.ID IS NULL 
; 

IS NULL условие ограничивает присоединиться к возвращать только pf_mitarbeiter строки, в которых нет pf_tagesplan_zuteilungen строки с соответствующим EmployeeID.

Смежные вопросы