表: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'
答案 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';