SQL查询:未选择任何行

时间:2013-03-26 18:52:37

标签: sql oracle10g

我尝试了sql语句的不同变体,但我仍然“没有选择行”。我不知道我哪里错了!。

以下是问题:

我必须列出经理为“绿色”的员工组织的会议标题。

与查询关联的表是:

Employee_C表:

EID  NAME   SALARY           MID
---    -------------------- -----
e01   Wilson    53000
e02   Smith      48000       e01
e03   Jones      38000       e01
e04   Loftus     41000
e05   Fox        54000       e04
e06   Smith      45000       e04
e07   Green      48000
e08   Fox        49000       e04
e09   Wolf       41000       e04
e10   Wang        32000      e01
e11   Phillips    33000      e07
e12   Liu         27000      e07

Conference_C表:

CONFID              TITLE                     LOCATION          SDATE
------        --------------------       -------------------- ---------
c00001    Hydroinformatics                  Singapore          15-JUN-12
c00002    Ecological_modeling               Berlin             15-JUL-12
c00003    Computational_M                   London             25-MAY-12
c00004    Ecoinformatics                    Boston             22-AUG-12
c00005    Uncertainty_analysis              Athens             10-OCT-12
c00006    Large_databases                   Toronto            13-APR-12
c00007    Systems_analysis                  Boston             23-MAR-12
c00008    Systems_integration               Tokyo              24-FEB-12
c00009    Aquatic_biology                   Helsinki           12-MAY-12
c00010    Information_systems               Paris               08-JAN-12
c00011    Simulation_modeling               Rome                01-SEP-12
c00012    DSS                               Melbourne          18-DEC-12

Deals_C表:

EID   CONFID
---    ------
e02   c00001
e03   c00001
e05   c00001
e06   c00001
e03   c00002
e08   c00002
e09   c00002
e10   c00002
e03   c00003
e05   c00003
e06   c00004
e08   c00005
e09   c00005
e10   c00005
e06   c00005
e11   c00006
e12   c00006
e05   c00007
e06   c00007
e08   c00007
e09   c00008
e10   c00008
e11   c00008
e02   c00009
e12   c00009
e10   c00010
e02   c00011
e03   c00011
e05   c00011
e12   c00012
e06   c00012

我拥有的sql语句是:

select C.Title 
from Conference_C C 
where C.ConfID in (select D.ConfID
                   from  Deals_C D 
                   where D.eid in (select E.eid 
                                   from Employee_C E 
                                   where E.Name = 'Green'));

我“没有选择行”

2 个答案:

答案 0 :(得分:4)

您的查询问题是您正在检查错误的员工数据。您的WHERE子句正在检查EIDEID何时应该检查Deals_C.EIDEmployees.MID

select C.Title 
from Conference_C C 
inner join
(
  select D.ConfID, e.eid
  from Deals_C D 
  inner join Employee_C e
    on d.EID= e.EID
  where exists (select *
                from Employee_C e2
                where E2.Name = 'Green'
                  and e.mid = e2.eid)
) d
  on c.CONFID = d.CONFID

请参阅SQL Fiddle with Demo

EXISTS查询返回姓氏为Green的行,但您需要检查Employee_C.MID到子查询EID

这也可以写成:

select C.Title 
from Conference_C C 
where C.ConfID in (select D.ConfID
                   from Deals_C D 
                   inner join Employee_C e
                     on d.EID= e.EID
                   where exists (select *
                                 from Employee_C e2
                                 where E2.Name = 'Green'
                                   and e.mid = e2.eid));

请参阅SQL Fiddle with Demo

答案 1 :(得分:0)

我刚遇到这个问题。我之所以选择“没有选择行”的原因仅仅是因为我的sqlcase被设置为UPPER并且我以小写字母查询。 即WHERE empName LIKE'_a%'; 我将sqlcase设置为mixed并解决了我的问题。似乎引号之间的字符串区分大小写。希望它有所帮助。