gpt4 book ai didi

sql - Oracle SQL - 在 "in"语句上左连接

转载 作者:行者123 更新时间:2023-12-02 06:40:22 25 4
gpt4 key购买 nike

下面查询的要点是返回人员列表以及他们是否不开心。但是,如果我不知道他们是否快乐,我想将他们的名字和他们的不快乐列为“快乐”。由于我对不快乐的定义有一些额外的要求,所以这很复杂。

我正在写这样的查询...

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;

所以我想返回表名中的每个名字,以及“快乐”或“不快乐”的值,即使这些名字可能在也可能不在情绪表中。当我按照我写的那样运行它时,我没有得到任何行。我认为这可能涉及我的 mood.type 行,因为我不能在“in”语句中使用左连接。

最佳答案

我认为你有几个问题:

  1. 您的 WHERE 子句中有一个虚假的分号。
  2. CASE 表达式在错误的位置。
  3. 不应在 IN 表达式中使用 NULL。

您可以删除分号并将 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

关于sql - Oracle SQL - 在 "in"语句上左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9235172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com