[英]ID should not display between the specified date?
使用SQL Server 2000
Database1.Table1
ID Name Date title
001 Ravi 23-02-2009 Accountant
001 Ravi 24-02-2009 Accountant
001 Ravi 25-02-2009 Accountant
002 Ram 21-02-2009 Supervisors
002 Ram 25-02-2009 Supervisors
002 Ram 26-02-2009 Supervisors
等等...,
Database2.Table2
ID Name Date1 Date2
001 Ravi 23-02-2009 24-02-2009
002 Ram 21-02-2009 24-02-2009
等等...
假设我要显示从2009年2月21日到2009年2月26日的记录-预期输出:
001 Ravi 25-02-2009 Accountant
002 Ram 25-02-2009 Supervisors
002 Ram 26-02-2009 Supervisors
在上面的两个表中,我要显示Database1.table1的ID,名称,日期,标题,其中Database1.table1.id不应在Database2.table2的date1和date2之间显示:
(23-02-2009 to 24-02-2009) ID should not display from table1
(21-02-2009 24-02-2009) ID should not display from table1
如何在SQL中进行查询?
谁能帮我。
对于表1中的每一行,我们在表2中查找行,并仅显示与表2不匹配的行:
SELECT TABLE1.* FROM TABLE1 LEFT JOIN TABLE2 ON (TABLE1.ID = TABLE2.ID) AND --JOIN TABLE2 BY ID (TABLE1.DATE BETWEEN TABLE2.DATE1 AND TABLE2.DATE2) --AND BY DATE CRITERIA WHERE (TABLE2.ID IS NULL) AND --SHOW ONLY IF IT DIDN'T MATCH ROW IN TABLE2 (TABLE1.DATE BETWEEN '21-02-2009' AND '26-02-2009')
尝试:
SELECT t.id,
t.name,
t.date,
t.title
FROM TABLE_1 t
WHERE NOT EXIST(SELECT NULL
FROM TABLE_2 t2
WHERE t.date BETWEEN t2.date1 AND t2.date2)
如果您的数据模型将日期存储在字符串中,请更新NOT EXISTS以使用CAST / CONVERT将其更改为DateTime。
请注意, 在SQL Server中 , LEFT JOIN / IS NULL不如NOT IN / NOT EXISTS效率高 。
我认为您正在寻找:
select db1.id, db1.name, db1.date, db1.title
from database1.table1 as db1
join database2.table2 as db2 on db1.id = db2.id
where db1.date < db2.date1
or db1.date > db2.date2
-don
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.