我使用的是 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:
SELECT p.Name, a.Attribute FROM People p LEFT OUTER JOIN Attributes a ON p.PersonID = a.PersonID AND a.Attribute IN ('Happy','Grouchy')