繁体   English   中英

从一个表中选择另一个表中不存在

[英]Select From One Table where Does not exist in another

我有一张桌子与人,我有第二张表来记录这些人是否“缺席”缺席表(缺席)有AbsenceID,PersonID和AbsentDate人员表有PersonID,FirstName,LastName

我正在尝试创建一个SQL,它将从People表中获取所有值,除了当天缺席的那些值。 因此,如果例如Joe在Absences表中列出并且AbsentDate是11/01/2014,我希望从生成的查询中排除他的名字。 这是我到目前为止所做的,但它没有告诉我什么:

我在下面尝试过,但它返回所有行:

SELECT * FROM People 
where not exists(Select PersonID 
                 from Absences 
                 where Absences.AbsentDate = 11/01/2014)

我确信这是一件非常简单的事情。 任何帮助,将不胜感激

SELECT * FROM People 
where PersonID NOT IN (Select PersonID 
                       from Absences 
                       where DateValue(Absences.AbsentDate) = '20140111')
                                                                  ^ YYYYMMDD

由于AbsentDate是一个日期/时间字段,它存储日期和时间,您正在寻找两者上的相等。 所以'11 / 01/2014'相当于搜索'11 / 01/2014 00:00:00.000',我几乎可以打赌什么都没有存储为。 因此,更好的方法是 '11 / 01/2014 00:00:00.0000'和'11/01/2014 23:59:59.999' 之间寻找您的值,这是BETWEEN运算符所做的。

SELECT *
FROM People
LEFT JOIN Absences ON (People.PersonID = Absences.PersonID) AND (Absences.AbsentDate BETWEEN '11/01/2014' AND '12/01/2014')
WHERE AbsenceID IS NULL

我不是NOT IN查询的粉丝,因为它们通常不具备高性能。 但是,连接表的主键为NULLLEFT JOIN工作得很好(假设适当的索引等)

首先你应该提到你正在使用哪个数据库,这里的当前信息是建议的答案你应该写如下查询

SELECT * FROM People where PersonID NOT in (Select PersonID 
                   from Absences 
                   where Absences.AbsentDate = sysdate)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM