2

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'));

「行が選択されていません」というメッセージが表示されました

4

2 に答える 2

4

クエリの問題は、間違った従業員データをチェックしていることです。あなたのWHERE節は、実際にtoをチェックする必要があるときにEIDtoをチェックしています:EIDDeals_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 FiddlewithDemoを参照してください。

クエリはのEXISTS名前を持つ行を返しますが、サブクエリGreenをチェックする必要があります。Employee_C.MIDEID

これは次のように書くこともできます。

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 FiddlewithDemoを参照してください

于 2013-03-26T19:03:24.827 に答える
0

私はちょうどこの問題を抱えていました。「行が選択されていない」理由は、sqlcaseがUPPERに設定されていて、小文字でクエリを実行していたためです。つまり、WHERE empName LIKE'_a%'; sqlcaseをmixedに設定して、問題を解決しました。引用符で囲まれた文字列では大文字と小文字が区別されるようです。それが役に立てば幸い。

于 2016-02-29T22:59:42.793 に答える