【问题标题】:Compare 1 field from sub query against other?将子查询中的 1 个字段与其他字段进行比较?
【发布时间】:2017-08-10 06:44:43
【问题描述】:

我正在尝试比较 oracle 选择查询中的两个字段作为 case 语句的一部分,其中一个来自子查询,但我收到错误。

例如

select 1 as one, 
       (select 2 from dual) as two,
       case when one=two then 'EQUAL'
            else 'NOTEQUAL'
       end match
from dual;

错误 ORA-00904:两个无效标识符

想想怎么改写?

提前致谢!

【问题讨论】:

  • 您需要嵌套选择,然后比较是否相等。
  • 一列和两列别名不在 case 语句的范围内。所以它不知道一两个是什么,你可以在 case 中使用完整的表达式,也可以在外部查询中使用 case。

标签: sql oracle select


【解决方案1】:

你不能使用别名,所以你必须重写数据源和子查询。

SELECT 1 as one,
       (SELECT 2 FROM dual) as two,
       CASE WHEN 1 = (SELECT 2 FROM dual)
            THEN 'EQUAL'
            ELSE 'NOTEQUAL' 
        END match
  FROM dual

结果

one two match
1   2   NOTEQUAL

【讨论】:

    【解决方案2】:

    问题是你不能在同级使用别名,你需要做一个子查询或一个cte

    WITH step1 as (
        select 1 as one
        from dual
    ), step2 as (
        select 2 as two
        from dual
    )
    SELECT case when one=two then 'EQUAL'
                else 'NOTEQUAL'
           end match
    FROM step1
    CROSS JOIN step2
    

    【讨论】:

      【解决方案3】:

      使用简单的子查询

      Select t.*,
             case when one=two then 'EQUAL'
                  else 'NOTEQUAL'
             end match
      From (
          select 1 as one, 
                 (select 2 from dual) as two
          from dual
      ) t;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-21
        • 1970-01-01
        • 1970-01-01
        • 2018-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-08
        相关资源
        最近更新 更多