sql - 在 Oracle 中使用 IN 运算符进行外连接的解决方法

标签 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

我想要一个人的名单,我想知道我们是否知道他们是快乐还是不高兴。以下是我想要的输出:
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 JOIN s?,您可以在 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')

关于sql - 在 Oracle 中使用 IN 运算符进行外连接的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10758526/

相关文章:

mysql - 如何在Ubuntu上的mysql中运行sql脚本?

mysql - 创建数据库时: Error Code: 1215.无法添加外键约束

sql - 是否可以创建动态 varchar2 变量?

oracle - Entity Framework 忽略架构

mysql - mysql 中可用的任何部分外连接

hibernate - (Lazy) LEFT OUTER JOIN 使用 Hibernate Criteria API

mysql - 我如何加入这些查询?

mysql - 添加一个 FOREIGN KEY 但说该列在它存在时不存在?

MySQL:找出丢失的订单 ID

mysql - 从 Oracle 迁移到 MySQL。使用字节定义的 VARCHAR2 长度。如何移植?