admin

为什么不能将OR或IN与OUTER JOIN操作一起使用?

sql

如果我在Oracle
SQL数据库中使用以下查询(此处受此问题启发):

SELECT p.Name, a.Attribute
FROM People p
LEFT OUTER JOIN Attributes a
ON p.PersonID = a.PersonID 
WHERE a.Attribute IN ('Happy','Grouchy')
AND p.person_id IN ('Elmo', 'Oscar')

我会得到错误:

ORA-01719:OR或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') AND p.person_id IN ('Elmo', 'Oscar')

谁能解释第一个版本调用错误的原因是什么?实际区别是什么?


阅读 272

收藏
2021-06-07

共1个答案

admin

顺便说一下,您已经在其中定义了一个内部联接。

通过在右手表上有一个子句,它必须满足两个条件。

SELECT p.Name, a.Attribute
FROM People p
LEFT OUTER JOIN Attributes a
ON p.PersonID = a.PersonID 
WHERE a.Attribute IN ('Happy','Grouchy') -- This means that the right side must exist also
AND p.person_id IN ('Elmo', 'Oscar')

使用INNER JOIN或将此WHERE作为AND移至ON子句

2021-06-07