首页 > 解决方案 > 选择特定的存在但仍包含不需要的结果

问题描述

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

Job_ID(键)|内容

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

表 2. [Test_Progress]

Job_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   

预期的:

Job_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)

但我仍然得到这个

Job_ID(键)|GroupID

1263        |    Sing   
1410        |    Jump   
2309        |    Run          

Sing and Run 工作已在 2/18/2019 之前完成,但仍然在这里。请帮我修复我的 SQL 中的错误点。先感谢您。

标签: sql-server

解决方案


我想你想要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 日之后找不到已完成工作条目的记录因此,符合此条件的此类工作应该是在此日期或之前完成的工作。


推荐阅读