我正在尝试创建一个SQL Select查询,在那里我可以看到今天正在工作的所有员工。
第一个查询选择所有员工:
SELECT Medarbejdere.navn AS Medarbejder
FROM Medarbejdere
另一个选择显示不在工作的员工
SELECT Medarbejdere.navn AS Medarbejder
FROM Medarbejdere, Fravaer
WHERE Medarbejdere.id = Fravaer.medarbejder
AND Fravaer.slut IS NULL
如何将这两个select语句组合起来,以便从完整的员工列表(第一个select语句(中删除今天没有上班的员工?
我尝试了UNION和JOIN。
有什么建议吗?
编辑-->这确实有效,但我想让它与JOIN一起工作
SELECT Medarbejdere.navn AS Medarbejder
FROM Medarbejdere
EXCEPT
SELECT Medarbejdere.navn AS Medarbejder
FROM Medarbejdere, Fravaer
WHERE Medarbejdere.id = Fravaer.medarbejder
AND Fravaer.slut IS NULL
Fravaer(缺席(没有结束日期(我试图过滤掉的那些(
INSERT INTO Fravaer VALUES (3, '2018-08-01', null, 4);
或有结束日期的缺席(我试图包括的(
INSERT INTO Fravaer VALUES (6, '2018-08-01', '2018-09-01', 5);
我不确定列名定义了什么,只是想给您一些想法。查找不在非工作列表中的员工。
您也可以使用"左联接",看看哪一个更快。
-- dummy query based on your inputs
SELECT Medarbejdere.navn AS Medarbejder
FROM Medarbejdere
where Medarbejdere.id not in (
SELECT Medarbejdere.id
FROM Medarbejdere, Fravaer
WHERE Medarbejdere.id = Fravaer.medarbejder
AND Fravaer.slut IS NULL )
-- second option, based on sample data
SELECT *
FROM Medarbejdere m
LEFT JOIN Fravaer f
ON f.medarbejder = m.ID
WHERE f.slut IS NOT NULL and f.slut>= '2018-09-01'; //you can use generic
currentdate option
您可以使用LEFT
联接:
SELECT *
FROM Medarbejdere m
LEFT JOIN Fravaer f
ON f.medarbejder = m.ID
WHERE f.ID IS NULL;