【问题标题】:How to do filter in SQL如何在 SQL 中进行过滤
【发布时间】:2013-05-08 06:38:18
【问题描述】:

我有一张包含Manager 详细信息的表格,其中包含以下字段,

 Name,   ID 

还有一个子表Appoinments,它将包含以下字段,

Manager ID , Date, Appoinment Details.

现在我需要从 Maneger 表中获取 maneger 的详细信息,那些今天没有约会的人。

我是 SQl 的新手。请帮我写查询

【问题讨论】:

  • 你在用什么RDBMSRDBMS 代表关系数据库管理系统RDBMS is the basis for SQL,适用于所有现代数据库系统,如 MS SQL Server、IBM DB2、Oracle、MySQL 等...

标签: sql sql-server tsql subquery


【解决方案1】:

注意,我假设您使用的是 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()) = 明天

【讨论】:

  • 如何使用join来做到这一点??
  • 不知道为什么要使用更优雅的存在语法可以工作的联接来执行此操作,但是您可以根据@RichardTheKiwi 的回答将联接管理器留给带有过滤器的约会,并在约会中测试 null
【解决方案2】:
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)
)

【讨论】:

    【解决方案3】:

    其他答案都对,这是加入版:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多