2017-07-04 12 views
-1

データベースTERRAに基づいて、次のSQLコードに問題があります。このコードでは、欧州諸国のみが加盟国となっているすべての組織を返すべきです。DB2 SQLの注文 - SQL0104N

SELECT DISTINCT O.Name FROM Organisation O, ist_Mitglied iM, Land L, 
umfasst U WHERE O.Abkuerzung = iM.Organisation AND iM.Land = L.L_ID 
AND L.L_ID = U.land AND Kontinent LIKE 'Europa%' AND EXCEPT (SELECT 
DISTINCT O.Name FROM Organisation O, ist_Mitglied iM, Land L, umfasst 
U WHERE O.Abkuerzung = iM.Organisation AND iM.Land = L.L_ID AND L.L_ID 
= U.land AND Kontinent NOT LIKE 'Europa%'); 

エラーメッセージは以下の通りです:

SQL0104N予期しないトークン "DISTINCT" は、以下見つかった "」AND EXCEPT(SELECT" 期待トークンが含まれる: "(" SQLSTATE =。 42601

あなたはどんな考えを持っていますか?ありがとう!

答えて

0

決して使用コンマFROM節に記載されています。 常には、適切で明示的なJOIN構文を使用します。

EXCEPTは、セットベースの演算子です。これは、先にANDであってはなりません。また、DISTINCTは不要です。試してみてください:

SELECT O.Name 
FROM Organisation O JOIN 
    ist_Mitglied iM 
    ON O.Abkuerzung = iM.Organisation JOIN 
    Land L JOIN 
    ON iM.Land = L.L_ID 
    umfasst U 
    ON L.L_ID = U.land WHERE Kontinent LIKE 'Europa%' 
EXCEPT 
SELECT O.Name 
FROM Organisation O JOIN 
    ist_Mitglied iM 
    ON O.Abkuerzung = iM.Organisation JOIN 
    Land L JOIN 
    ON iM.Land = L.L_ID 
    umfasst U 
    ON L.L_ID = U.land 
WHERE Kontinent NOT LIKE 'Europa%'; 

他の方法でクエリを書くことができます。これはあなたの質問に質問を書く方法に最も近いようです。

+0

ありがとうございました。それは今働いている。 – waterline

+0

@ Gordon Linoff:私はジョインのためにカンマを使用してはいけないとは言いません。ときには、再帰が必要な状況のような問題を解決することもあります。ほとんどのルールに例外があります:-) – MichaelTiefenbacher

+0

@MichaelTiefenbacher 。 。私は、FROM句*でカンマを使用しないと言っています。彼らのSQLに古くなった構文がある場合、私は学生に質問に対して0クレジットを与えます。 –