4

私は Oracle SQL を使用しているため、外部結合には適切な (+) 構文があります。データベースを再設計することは許可されていないことを警告しておきます。私は大きな組織で働いています。

以下にいくつかのテーブルの例を示します。

People
PersonID   Name
1          Elmo
2          Oscar
3          Chris

Attribute
PersonID   Attribute
1          Happy
1          Muppet
1          Popular
2          Grouchy
2          Muppet
2          Popular
3          Programmer

人々のリストが欲しいのですが、彼らが幸せであるか不機嫌であるかを知っているかどうかを知りたいです。以下は私が望む出力です:

Name       Mood
Elmo       Happy
Oscar      Grouchy
Chris

だからここに私が使用すると思ったクエリがあります:

SELECT p.Name, a.Attribute
FROM People p, Attributes a
WHERE p.PersonID = a.PersonID (+)
AND ( a.Attribute (+) = 'Happy'
   OR a.Attribute (+) = 'Grouchy' )

(おそらく、「OR a.Attribute IS NULL」などを入力する必要があります。)

しかし実際には、外部結合内で OR を使用することはまったく許可されていません。代わりに実際に何をすべきですか?

4

3 に答える 3

8

まず第一に、なぜ適切な s を使用できないのでしょうか? Oracle では、構文OUTER JOINで暗黙的な結合を行うことなくそれらを使用できます。(+)あなたの問題に関しては、次を使用できますIN

SELECT p.Name, a.Attribute
FROM People p
LEFT OUTER JOIN Attributes a
ON p.PersonID = a.PersonID AND a.Attribute IN ('Happy','Grouchy')
于 2012-05-25T17:17:51.643 に答える
0

私自身の質問に答えてすみません。エラーORA-01719を回避するために、@ Lamakのアドバイスに従ってすべてを「適切な」結合に変更し、次の解決策を採用しました。

SELECT p.Name, a.Attribute
FROM People p
LEFT OUTER JOIN  (SELECT PersonID, Attribute
                  FROM Attributes
                  WHERE Attribute = 'Happy' OR Attribute = 'Grouchy') a
ON (p.PersonID = a.PersonID)
于 2012-05-25T18:27:45.163 に答える