如何编写SQL语句筛选关联Docs表同时含File1和File2的Job数据
解决思路与正确SQL语句
嘿,我来帮你搞定这个SQL查询问题!你之前尝试的语句里用了Filename = 'File1' and Filename='File2',这其实走不通——毕竟单条记录的Filename字段不可能同时等于两个不同的值,所以这个条件永远匹配不到任何数据。
下面给你几种可行的解决方案,都能准确筛选出同时关联File1和File2的Job:
方法一:分组统计法
先筛选出包含目标文件的记录,再按Job分组统计不同文件的数量,确保数量刚好是2(也就是两个文件都存在):
SELECT j.* FROM Jobs j INNER JOIN Docs d ON j.JobId = d.JobId WHERE d.Filename IN ('File1', 'File2') GROUP BY j.JobId, j.Desc HAVING COUNT(DISTINCT d.Filename) = 2;
方法二:多表关联法
通过两次内连接,分别匹配File1和File2的记录,只有同时满足两个连接条件的Job才会被选中:
SELECT j.* FROM Jobs j INNER JOIN Docs d1 ON j.JobId = d1.JobId AND d1.Filename = 'File1' INNER JOIN Docs d2 ON j.JobId = d2.JobId AND d2.Filename = 'File2';
方法三:EXISTS子查询法
用两个EXISTS子查询分别验证该Job是否存在File1和File2的记录,两个条件都满足才返回结果:
SELECT * FROM Jobs j WHERE EXISTS ( SELECT 1 FROM Docs d WHERE d.JobId = j.JobId AND d.Filename = 'File1' ) AND EXISTS ( SELECT 1 FROM Docs d WHERE d.JobId = j.JobId AND d.Filename = 'File2' );
这三种方法都能正确得到你想要的JobId=1的结果,你可以根据自己的习惯和数据库的性能情况选择使用~
内容的提问来源于stack exchange,提问作者Code Pope
相关产品推荐
相关产品推荐

