【问题标题】:Can you use an 'In' operator in a column expression?您可以在列表达式中使用“In”运算符吗?
【发布时间】:2020-05-02 05:57:16
【问题描述】:

使用 Oracle 11。尝试为概念演示编写一些简单的代码。为了说明我想要实现的目标,假设我有 SOMETABLE,它有两列:ID 和 NAME,如下所示:

ID  NAME
---------
1   Tom
2   Larry
3   David
4   Steve

如果第二列匹配两个硬编码值之一,我正在尝试计算第三列。像这样的东西(当然行不通。)

Select ID,
       NAME,
       (NAME in ('Larry', 'David')) as IS_FAVORITE
from SOMETABLE

并希望得到这个输出......

ID  NAME   IS_FAVORITE
----------------------
1   Tom    FALSE
2   Larry  True
3   David  True
4   Steve  FALSE

令我惊讶的是,我被告知 Oracle 没有布尔值的概念,我应该使用“数字字符串”或类似的东西,所以这也很好......

ID  NAME   IS_FAVORITE
----------------------
1   Tom    'N'
2   Larry  'Y'
3   David  'Y'
4   Steve  'N'

那么你能在这样的列表达式中使用IN 运算符吗?如果没有,如何计算我所追求的列?

【问题讨论】:

  • IN 是一个条件,而不是一个函数。 (它不是一个函数,因为 Oracle 没有 Boolean 数据类型;但它确实有条件。您只是不能返回条件的 (Boolean) 值以供进一步处理。)
  • 是的,通过下面的答案发现了这一点,这就像一个冠军!

标签: sql oracle oracle11g calculated-columns


【解决方案1】:

您可以使用case 表达式实现您的预​​期输出。

Select ID,
       NAME,
       CASE
        WHEN
            NAME in ('Larry', 'David')
        THEN
            'TRUE'
        ELSE
            'FALSE'
        END as IS_FAVORITE
from SOMETABLE

【讨论】:

  • Oracle 会抱怨FALSE(和TRUE,但它会首先抱怨FALSE)是未知标识符。
  • 完美!冗长,但完美! (顺便说一句,Oracle 不知道 TRUE 和 FALSE 是什么,所以我将其更改为 'Y' 和 'N')
  • 你使用的是case 表达式。 PL/SQL 也有case 语句(类似于case 表达式,但性质不同)。普通 SQL 中没有 case 语句
  • 嗯...我很困惑。 @mathguy 说您实际上使用了 case 表达式,并且您最初在文本中有“表达式”,但即使他说 SQL 没有语句,也只是将其更新为“语句”。啊?? [抓头]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多