Sql 带IN运算符的左外联接

Sql 带IN运算符的左外联接,sql,oracle,outer-join,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

我正在使用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      null (Happy)
Chris      null (Happy)

Elmo       null (Grouchy)
Oscar      Grouchy
Chris      null (Grouchy)
如果使用此查询,它将不会返回所需的其他空结果行:

SELECT p.Name, a.Attribute
FROM People p
LEFT OUTER JOIN Attributes a
ON p.PersonID = a.PersonID AND a.Attribute IN ('Happy','Grouchy')
我知道工会会管用的。还有别的办法吗


请原谅我的懒惰,我修改了一个已经存在的问题。

您需要生成所有可能的行,然后查看哪个匹配。这使用了
交叉连接
左连接

select p.name,
       (case when pm.mood is not null then pm.mood
             else 'NULL (' || m.mood || ')'
        end) as mood
from (select 'Happy' as mood from dual union all
      select 'Grouchy' from dual
     ) m cross join
     (select distinct p.name from people
     ) p left outer join
     People pm
     on pm.name = p.name and pm.mood = p.mood
order by m.mood, p.name;

您的意思是,当两种情绪都不存在时,您希望每个情绪都有一个
NULL
?对于处于“in”状态的每个情绪,您都需要一个到属性表的联接。否则就不可能返回Elmo happy和Elmo NULL@GoatCO是的,你是对的。