我在 MySQL 中有一张表,其中列出了所有员工。我还有另一个列出了所有必须在特定日期工作的员工。现在我想选择所有有空闲的员工(或者至少没有在工作表中列出)。在这个小提琴中,您可以看到我的架构。
像这样的代码SELECT * FROM pf_mitarbeiter WHERE NOT LISTED AS employeeID IN pf_tagesplan_zuteilungen
会非常棒。但我也采用其他版本。
感谢你们!
在没有匹配行的条件下使用 aLEFT 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
select *
from A
where not exists
(
select 1
from B
where a.key = b.key
)
使用 aLEFT 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 的行的行。