sql从两个select语句中删除common



我正在尝试创建一个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;

相关内容

  • 没有找到相关文章

最新更新