SELECT子句使用存在多个表

时间:2014-05-08 15:17:25

标签: sql oracle

表:Sneed,apply,coursepass

//Sneed 
P#         SNAME
------------------
0001         C
0002         C++
0003         JAVA
0004         C

//Applies
A#          P#
----------------
000001      0001
000002      0002
000003      0001

//coursepass
A#        TITLE
---------------------
000001    C PROGRAM
000002    JAVA
000003    PRINTING

我的问题是找到申请职位的申请人需要一个技能(Sneed)名称的课程名称' C'

我使用了以下查询

SELECT cp.CTITLE FROM COURSEPASSED cp WHERE
EXISTS 
(SELECT P# FROM APPLIES ap WHERE cp.A#=ap.A# AND
EXISTS
(SELECT P# FROM SNEEDED sn WHERE sname='C programming'));

但得到一个空的结果。 我的输出应该是这样的

TITLE
---------
C PROGRAM  //  <--- As P#=0001 required 'C'

1 个答案:

答案 0 :(得分:0)

你的一个条款就是:

EXISTS (SELECT P# FROM SNEEDED sn WHERE sname='C programming');

这会返回FALSE,因为sname永远不会占用值'C programming'。因此整个子句返回FALSE

对于您的样本数据,您可以使用:

EXISTS (SELECT P# FROM SNEEDED sn WHERE sname = 'C');

也许你的意思是:

EXISTS (SELECT P# FROM SNEEDED sn WHERE sname = 'C' or sname like 'C %');

编辑:

查询的逻辑看起来不正确。您的整体查询可能应该有明确的连接来组合这些易于组合的表:

SELECT cp.CTITLE
FROM COURSEPASSED cp JOIN
     APPLIES a
     ON cp.A# = a.A# JOIN
     SNEEDED s
     ON s.P# = a.P# 
WHERE sname = 'C';