我正在使用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!我实际上应该怎么做?
首先,为什么不能使用适当的OUTER JOINs?您可以在Oracle中使用它们而不必使用(+)语法进行隐式联接。至于您的问题,您可以使用IN:
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')