2013-03-04 156 views
0

我挣扎在SQL查询过滤条目...我有三个表:SQL子查询:不返回行

1)工作

2)paper1

3)paper2

paper1paper2有一个列表job_id其中引用了相应的作业ID;所以具有编号的工作具有paper1.job_id的。

现在,我希望看到有相应的paper1但没有paper2所有作业(这样的:未完成的,因为paper1paper2是这个职位的要求得到满足)。我的尝试是这样的,但它没有正确工作:

SELECT id 
FROM jobs 
WHERE (SELECT id FROM paper1 WHERE (job_id = jobs.id) != 0 LIMIT 1) 
AND (SELECT id FROM paper2 WHERE (job_id = jobs.id) = NULL LIMIT 1) 

任何帮助表示赞赏;谢谢。

回答

0

尝试作业:

Select job_id 
FROM paper1 
WHERE job_id NOT IN (Select job_id from paper2 group by paper2) 

GROUP BY job_id; 
+0

非常感谢!这种方法比阿纳托利斯的方法快近12(!)倍 – Martin 2013-03-07 08:42:51

1
select id 
from jobs 
where exists (select p1.id from paper1 as p1 where p1.job_id = jobs.id) 
    and not exists (select p2.id from paper2 as p2 where p2.job_id = jobs.id) 
+0

辉煌;非常感谢。 – Martin 2013-03-04 12:48:27

0

根据我的理解,我认为你只想要其中仅在paper1但不是在paper2 如果多数民众赞成的要求,然后尝试下面的代码

select * from jobs where id in (select distinct j1 from 
(select a.job_id as j1,b.job_id as j2 from paper1 a,paper2 b where a.job_id=b.job_id(+)) 
where j2 is null)