我在MySQL中有一个表,列出了所有员工。我还有另一个列出所有员工的工作,这些员工必须在特定日期工作。现在我想选择所有免费(或至少未列在工作表中)的员工。 在此 fiddle 中,您可以看到我的架构。
像SELECT * FROM pf_mitarbeiter WHERE NOT LISTED AS employeeID IN pf_tagesplan_zuteilungen
这样的代码会非常棒。但我也会采用其他版本。
谢谢你们!
答案 0 :(得分: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
答案 1 :(得分:1)
select *
from A
where not exists
(
select 1
from B
where a.key = b.key
)
答案 2 :(得分: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。