如何在T-SQL中编写复杂的主 - 详细信息查询

时间:2010-11-05 17:27:01

标签: sql-server join


我需要一些帮助,以我需要的方式运行SQL查询。我知道你的sql大师会嘲笑这个,但我真的不知道怎么做:-(
我在MS-SQL数据库中有两个表。一个是工作人员,另一个是合同。它们处于一对多的关系中,即一个工人可以拥有零个或多个合同 合同发生了变化,要求所有工人签订新合同。 我需要得到的是尚未签订新合同的所有工人。那是谁在某个日期之后没有合同。我尝试使用左外连接,但它不起作用:-(

这些是表格中的关键栏目:

工:
WorkerID
名字
姓氏
......

合同:
ContractID
日期
WorkerID

......

非常感谢任何帮助 谢谢。
TREX

3 个答案:

答案 0 :(得分:3)

select w.WorkerID, w.Firstname, w.LastName
from Workers w
left outer join Contracts c on w.WorkerID = c.WorkerID
    and c.Date > @MyDate
where c.WorkerID is null

答案 1 :(得分:0)

使用子查询:

select * from Workers where WorkerID not in
(select distinct WorkerID from Contracts where Date > @myDate)

答案 2 :(得分:0)

坚持使用子查询,但包括日期:

SELECT * from Workers where WorkerID not in
(SELECT DISTINCT WorkerID FROM CONTRACTS WHERE Date > @MyDate)

其中@MyDate是合约更改后的特定日期。