2016-09-23 7 views
0

私は、次のヘルプのために最も感謝し、次のようになります。Oracle SQL - 存在しない場合に使用する最良の方法は?

SELECT A.EMPLOYEE, A.PHONE AS CELL, B.PHONE AS OFFICE, C.PHONE AS HOME 
FROM PHONE_NUMBERS A, PHONE_NUMBERS B, PHONE_NUMBERS C 
WHERE A.EMP_NUM = B.EMP_NUM 
    AND A.EMP_NUM = C.EMP_NUM 
    AND A.PHONE_TYPE = 'CELL' 
    AND B.PHONE_TYPE = 'OFFICE' 
    AND C.PHONE_TYPE = 'HOME' 

私の問題は、以下の通りです:従業員はCELLとHOME電話機タイプを持っていますが、エントリがオフィスの電話タイプのために存在しない、クエリは返さない場合彼はオフィスが存在しないためです。私はCASE文を試しましたが、電話の種類がなければ、CASEは何も比較することはありません。 IF NOT EXISTSに関して多くの投稿を読んだことがありますが、これが正しい方法であるかどうかはわかりません。私はすべてのEMP_NUMを返すようにクエリを望み、特定のPHONE_TYPEが存在しない場合はnullを返します。

答えて

0

使用 "の完全外部は" 私はあなたがOUTER JOINを試すことができると思い

SELECT coalesce(h.EMPLOYEE, o.EMPLOYEE, c.EMPLOYEE) Employee, 
     c.PHONE AS CELL, o.PHONE AS OFFICE, h.PHONE AS HOME 
FROM PHONE_NUMBERS h 
    full join PHONE_NUMBERS o 
     On o.EMP_NUM = h.EMP_NUM 
     and h.PHONE_TYPE = 'HOME' 
     and o.PHONE_TYPE = 'OFFICE' 
    full join PHONE_NUMBERS C 
     On c.EMP_NUM = h.EMP_NUM 
     and c.PHONE_TYPE = 'CELL' 
+0

ない私が探していたものを、非常に(+)との結合にこれは一例ですが、それは私があったより遠くに沿っです。私はそれを使って遊んで、全体を並べ替えたときにコメントします。ありがとうございました。 – glennsnoise

+0

あなたが既に理解していない限り、 'Full Join'でGoogleがこれを理解するために...外部結合が何であるか知っていれば、' Full Join'または 'Full Outer Join'は双方向外部結合です。左または右だけではなく、両方向で「外側」である結合。 –

+0

私は今それらについて読んでおり、いくつかの例を試しています。私の問題は、私のテーブルでは、フィールドが空白ではないという事実にあると思う。データが入力されていない場合、フィールドは存在しません。テーブルの複数のインスタンス(AとB)、各占有フィールドPHONE(A.PHONEとB.PHONE)が別々のフィールド(PHONE_TYPE)で区別されている場合、どのようにPHONE_TYPEに対してNULLを生成するのですか従業員のために存在しない?これは空白ではなく、存在しません。 – glennsnoise

0

合流します。 OUTERが

SELECT A.EMPLOYEE, A.PHONE AS CELL, B.PHONE AS OFFICE, C.PHONE AS HOME 
FROM PHONE_NUMBERS A, PHONE_NUMBERS B, PHONE_NUMBERS C 
WHERE A.EMP_NUM = B.EMP_NUM 
AND A.EMP_NUM = C.EMP_NUM 
AND A.PHONE_TYPE = 'CELL' (+) 
AND B.PHONE_TYPE = 'OFFICE' (+) 
AND C.PHONE_TYPE = 'HOME' (+) 
+0

私は(+)が全面的に機能しないと思っています。私はOracle(PeopleSoft)に問い合わせています。私はエラーが発生しています。 – glennsnoise

関連する問題