五张桌子:
//Applicant
A#
-----------------
1
2
3
4
5
//coursepass
A# ctitle
-------------------
1 hello
2 testing
3 yeah
4 coding
5 computer
//position
p#
----------------
0001
0002
0003
0004
0005
0006
//applies
A# p#
-------------
1 0001
2 0001
3 0002
4 0003
5 0004
6 0005
//Sneeded
p# sname
-----------------
0001 Java
0002 C++
0003 C#
0004 C
0005 C
我的问题是找到申请人coursepassed
的头衔,申请人没有申请任何需要技能名称的职位='C'
所以对于我上面的表格。我们可以看到p#0004,0005需要'C',所以A#= 1,2,3,4应用一个位置但是位置不需要'C'所以请参考coursepass,ctitle hello,testing ,是的,编码将显示
//RESULT
CTITLE
-------------
hello
testing
yeah
coding
我使用此查询,但无法获得我想要的结果
SELECT cp.CTITLE
FROM COURSEPASSED cp
WHERE NOT EXISTS (SELECT a.A#
FROM APPLIES a
JOIN SNEEDED sn ON a.P#=sn.P# and sn.SNAME='C');
以下查询返回我期望的结果。
SELECT cp.CTITLE
FROM COURSEPASSED cp
WHERE cp.A# NOT IN (SELECT a.A#
FROM APPLIES a
JOIN SNEEDED sn ON a.P#=sn.P# and sn.SNAME='C');
但我想使用NOT EXISTS
条件。我该如何更改查询?
答案 0 :(得分:2)
您的NOT EXISTS
子句应引用外部表中的某些值。
SELECT cp.CTITLE FROM COURSEPASS cp
WHERE NOT EXISTS
(
SELECT a.A# FROM APPLIES a JOIN SNEEDED sn
ON a.P#=sn.P# and sn.SNAME='C'
WHERE a.A# = cp.A# // notice reference back to cp
);