如果我在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')
谁能解释第一个版本调用错误的原因是什么?实际区别是什么?
顺便说一下,您已经在其中定义了一个内部联接。
通过在右手表上有一个子句,它必须满足两个条件。
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子句