选择特定于存在但仍包含不需要的结果

时间:2019-03-25 04:34:02

标签: sql-server

我有2个表,我试图获取包含Job_ID的表1,该表在2019年2月18日之前尚未完成表2中的进度。 表1. [Test_Job]

工作ID(密钥)|内容

1263        |    Sing   
1410        |    Jump   
2309        |    Run    
3456        |    Swim    

表2。[Test_Progress]

工作ID |百分比|日期

1410        |    10     |  2019-02-04   
1410        |    50     |  2019-02-11   
1410        |    60     |  2019-02-18   
2309        |    50     |  2019-02-04   
2309        |    100    |  2019-02-11   
3456        |    100    |  2019-02-18   
1263        |    20     |  2019-02-04   
1263        |    100    |  2019-02-11   

预期:

作业ID(密钥)| GroupID

1410        |    Jump     

我的SQL查询是:

SELECT * FROM Test_Job WHERE EXISTS (SELECT 1 FROM Test_Progress WHERE Test_Progress.[Percent]<100 AND Test_Progress.Date<'2019/02/11' AND Test_Job.Job_ID=Test_Progress.Job_ID)

但是我还是得到这个

作业ID(密钥)| GroupID

1263        |    Sing   
1410        |    Jump   
2309        |    Run          

《唱歌与跑步》工作已在2019年2月18日之前完成,但仍在此处。请帮助我修复SQL中的错误点。预先谢谢你。

1 个答案:

答案 0 :(得分:0)

我认为您想在这里NOT EXISTS

SELECT *
FROM Test_Job tj
WHERE NOT EXISTS (SELECT 1 FROM Test_Progress tp
                  WHERE tp.Date <= '2019-02-18' AND
                        tp.Percent = 100
                        tj.Job_ID = tp.Job_ID);

这表示要查找我们 无法找到日期大于2019年2月18日的完整工作条目的记录。因此,符合此条件的此类工作应是在该日期或之前完成的工作。