我正在尝试执行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
我如何结合这两个选择语句,以便将今天不在工作中的雇员从雇员的完整列表(第一个选择语句)中删除?
我尝试了UNION和JOINS。
有什么建议吗?
编辑-> 这确实有效,但是我想使其与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
没有结束日期的我(缺席)(我正在尝试过滤掉的那些人)
INSERT INTO Fravaer VALUES (3, '2018-08-01', null, 4);
或没有结束日期(我要包括的人)
INSERT INTO Fravaer VALUES (6, '2018-08-01', '2018-09-01', 5);
答案 0 :(得分:1)
您可以使用LEFT
连接:
SELECT *
FROM Medarbejdere m
LEFT JOIN Fravaer f
ON f.medarbejder = m.ID
WHERE f.ID IS NULL;
答案 1 :(得分:1)
我不确定列名定义了什么,只是给您一些想法。查找不在无效列表中的员工。
您还可以使用Left join并查看哪个连接更快。
-- 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