小编典典

在Oracle中使用IN运算符进行外部联接的解决方法

sql

我正在使用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!我实际上应该怎么做?


阅读 304

收藏
2021-04-07

共1个答案

小编典典

首先,为什么不能使用适当的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')
2021-04-07