Sql 如何选择在日期范围之间的单独表中没有日期记录的服务器?

Sql 如何选择在日期范围之间的单独表中没有日期记录的服务器?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,表1保存了包括服务器名称在内的服务器信息 表2显示了安装修补程序的日期 表3保存了备份数据 我想选择一个服务器列表,该列表在表2中的某个日期范围内没有日期。这是我尝试过的查询,在我看来它应该可以工作,但不能 select distinct table1.name, table2.patchsuccess, table2.patcheddate, table3.backupdate from table2 full join table1 on table1.id = table2.fk_

表1保存了包括服务器名称在内的服务器信息 表2显示了安装修补程序的日期 表3保存了备份数据

我想选择一个服务器列表,该列表在表2中的某个日期范围内没有日期。这是我尝试过的查询,在我看来它应该可以工作,但不能

select distinct table1.name, table2.patchsuccess, table2.patcheddate, table3.backupdate
from table2
full join table1
    on table1.id = table2.fk_table1
full join table3
    on table3.fk_table1 = table1.id
where table2.patchsuccess between '2014-07-01' and '2014-09-1' and table1.decommissioned = 0
order by table1.name

拉取我想要的信息的好方法是什么?

我会采用这种结构。您可以填写以下详细信息:

SELECT T1.*, T3.*
FROM Table1 AS T1
JOIN Table3 AS T3
  ON T3.FK_Table1 = T1.ID
WHERE NOT EXISTS ( SELECT * FROM Table2 AS T2 WHERE T2.fk_table1= T1.ID
                       AND T2.patchsuccess BETWEEN '2014-07-01' and '2014-09-1' )
  AND T1.Decomissioned = 0
select blah, blah, blah
from YourTables join 
(select the IDs you want
except 
select the IDs you don't want) temp on SomeTable.id = temp.id
where whatever

“不在”往往是缓慢的。“不存在”或“除此之外的其他”不太直观,但运行速度更快。没错,此时并没有考虑性能,但考虑到了。。。将修改。我尝试了代码并收到以下错误:Msg 156,级别15,状态1,第5行关键字“exists”附近的语法不正确。Msg 156,15级,状态1,第7行关键字“and”附近的语法不正确。我现在收到多个:Msg 4104,16级,状态1,第2行无法绑定多部分标识符“t3.fk_t1”。t1.id、t3.fk_t1、t2的情况相同。patchsuccess、t1.Decommission。我在查询中将所有列名都更改为别名t1、t2、t3,然后收到消息“将varchar值'2014-07-01'转换为数据类型bit时转换失败”。伙计,是您的SQL出错了。。。成功是一个约会???还是有点???为什么SQL中的日期介于?您能再详细说明一下吗?我不明白如何使用您输入的代码。StackOverflow不是一个填鸭式网站。你不懂的部分是什么?使用“除外”?加入子查询?还有别的吗?