以下查询的要点是返回一个人员列表以及他们是否不满意。但是,如果我不知道他们是否幸福,我想列出他们的名字和他们不高兴的“快乐”。由于我对定义不满意的内容有一些额外的要求,这很复杂。
我正在写这样的查询...
Select name.firstName,
CASE
WHEN Mood.mood is not null
THEN 'Unhappy'
ELSE 'Happy'
END Unhappy
From name
Mood
WHERE mood.firstName(+) = name.firstName
AND mood.type IN ('Hungry','Tired','Fatigued','Bored',null)
AND mood.value(+) > 5;
所以我想从表名返回每一个名字,并且要么是“happy”或“unhappy”的值,即使这些名字可能在心情表中也可能不在。当我编写它时运行它,我没有行。我认为这可能涉及我的mood.type行,因为我不能在“in”语句中使用左连接。
答案 0 :(得分:9)
我认为你有几个问题:
您可以删除分号并将IN表达式改为:
AND (mood.type IN ('Hungry','Tired','Fatigued','Bored') OR mood.type IS NULL)
另外,我强烈建议您不要使用过时的连接语法。使用JOIN关键字可能是一个好主意,因为它使这种查询更加容易。
SELECT
name.firstName,
CASE
WHEN Mood.mood IS NOT NULL
THEN 'Unhappy'
ELSE 'Happy'
END Unhappy
FROM name
LEFT JOIN Mood ON
mood.firstName = name.firstName AND
mood.type IN ('Hungry','Tired','Fatigued','Bored') AND
mood.value > 5
答案 1 :(得分:0)
我会这样做:
select n.firstname,
nvl(m.mood, 'Happy') mood
from
name n
left outer join mood m
on n.firstname = m.firstname
where
nvl(m.type,'Hungry') in ('Hungry', 'Tired', 'Fatigued', 'Bored')