2013-05-08 47 views
0
我在与 Manager细节的表具有以下字段

如何做到过滤器在SQL

Name, ID 

和子表Appoinments它包含以下字段,

Manager ID , Date, Appoinment Details. 

现在我需要从Maneger表中得到Maneger的细节,那些今天没有任命的人。

我是新来的SQl。请帮我写出查询

+0

你正在使用什么[RDBMS](http://en.wikipedia.org/wiki/Relational_database_management_system)? 'RDBMS'代表*关系数据库管理系统*。 'RDBMS是SQL'的基础,并且适用于所有现代数据库系统,如MS SQL Server,IBM DB2,Oracle,MySQL等...... – 2013-05-08 06:40:55

+0

MS SQL Server ..... – 2013-05-08 06:43:54

回答

3

注意我假定你正在使用SQL Server。

select m.* 
    from manager m 
where not exists (select * 
        from appointments a 
        where m.id = a.manager_id 
         and a.date >= datediff(d,0,getdate()) 
         and a.date < datediff(d,-1,getdate())); 

注:
DATEDIFF(d,0,GETDATE())=今天
DATEDIFF(d,-1,GETDATE())=明天

+0

如何使用连接执行此操作? – 2013-05-08 06:41:13

+0

不知道你为什么想要用更优雅的存在语法可以工作的连接来做到这一点,但你可以通过@ RichardTheKiwi的回答并在约会中测试null来将联合管理器留在过滤器的约会中 – 2013-05-08 06:56:50

1
select * from manager m 
where not exists 
(
    select 1 
    from appointments a 
    where a.manager = m.manager 
    and a.date = today (whatever today in your SQL is) 
) 
0

其他的答案是正确的,这是一个连接版本:

SELECT M.Name, M.ID 
FROM manager M LEFT JOIN appointments A ON M.id = A.manager_id 
WHERE DATEADD(dd, 0, DATEDIFF(dd, 0, A.date)) != DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) 
GROUP BY M.Name, M.ID;