Chr*_*ham 4 sql oracle outer-join
我正在使用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
Run Code Online (Sandbox Code Playgroud)
我想要一份人员名单,我想知道我们是否知道他们是幸福或不高兴.以下是我想要的输出:
Name Mood
Elmo Happy
Oscar Grouchy
Chris
Run Code Online (Sandbox Code Playgroud)
所以这是我认为我会使用的查询:
SELECT p.Name, a.Attribute
FROM People p, Attributes a
WHERE p.PersonID = a.PersonID (+)
AND ( a.Attribute (+) = 'Happy'
OR a.Attribute (+) = 'Grouchy' )
Run Code Online (Sandbox Code Playgroud)
(也许我必须把"OR a.Attribute IS NULL"或其他东西.)
但实际上我根本不允许在外连接中使用OR!我该怎么办呢?
首先,为什么你不能使用正确的OUTER JOINs?,你可以在Oracle中使用它们,而不必使用(+)语法的隐式连接.至于你的问题,你可以使用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')
Run Code Online (Sandbox Code Playgroud)