SQL查询如果匹配另一个表中的条目(例如假日日期),则排除记录
我有两张桌子:
和
我需要获取任何给定应用程序名称的isavailable标志,但它应该只返回如果该日不是假日. isavailable标志与假期无关 – 仅在存在系统范围问题时才设置,而不是在设定的时间表上设置. 我最初有类似的东西: select top 1 apps.isavailable from dbo.Applications apps,dbo.Holidays hol where apps.applicationid = hol.applicationid and apps.applicationname = @appname and ((datediff(dd,getdate(),hol.holidaydate)) != 0) 但即使今天是假期,这也是回归记录,因为今天的其他假日日期并不相同. 我试过了 and (CONVERT(VARCHAR,101)) not in (CONVERT(VARCHAR,hol.holidaydate,101)) (它在SQL Server 2005上,所以没有Date类型所以我必须转换它) 但同样,即使今天是假期,它也会返回记录.如果今天不是假日,我如何使用“not in”或“except”子句(或其他内容)来构造此查询,以仅返回记录? 更新 我不需要没有假期的所有应用程序名称列表 – 我需要指定apps.applicationname的记录.以下答案仅返回今天没有假期的应用程序名称.如果查询不是假日,则查询应返回isavailable标志,否则如果是假日则不返回任何记录.我不关心其他应用程序. 另外,如果我添加一个表格如下:
我是否可以加入所有这三个表格,只有在特定日期的小时内且不是假期时才返回记录?我是否必须在单独的查询中执行此操作? 解决方法以下查询应该为您提供一个没有为CURRENT日期定义假期的应用程序列表.SELECT apps.ApplicationName,apps.isavailable FROM dbo.Applications apps WHERE apps.ApplicationName = @AppName AND NOT EXISTS ( SELECT * FROM Holidays WHERE ApplicationId = apps.ApplicationId AND CONVERT(VARCHAR,101) = CONVERT(VARCHAR,holidaydate,101) ) 基本上我们所做的就是选择没有匹配的所有东西. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Sqlite数据库里插入数据的条数上限是500
- sql-server – INSERT语句中的行值表达式数超过了允许的最大
- sql-server – 在SQL Server(datetime类型)中存储datetime时
- 第一次谈兼职写书的经过
- SqlServer2005(2000)数据库字典,将表数据生成SQL脚本的存
- sql – Oracle:查找仅包含空值的列
- sqlserver行转列
- sql-server-2005 – 为SQL Server 2005中的数据库角色成员生
- SQL Server误区30日谈 第10天 数据库镜像在故障发生后 马上
- sql-server – 如何在SQL Server数据库中设计用户/角色架构