【问题标题】:Use table in order by case when does not work在不起作用时按顺序使用表格
【发布时间】:2021-08-26 09:17:54
【问题描述】:

我正在运行此查询,但出现错误

select *
from dog
order by case
             when exists(
                     select 1 from dogfood where dog.dogid = dogfood.dogid)
                 then '1'
             else '0' end;

所以 2 个表,dogdogfood,它们都有一个 dogid 列。我收到此错误:

[42703][-206] "DOG.DOGID" 在上下文中无效 它被使用.. SQLCODE=-206, SQLSTATE=42703, DRIVER=4.26.14 [56098][-727] 隐式系统操作类型期间发生错误 “2”。为错误返回的信息包括 SQLCODE "-206", > SQLSTATE "42703" 和消息标记 "DOG.DOGID".. > SQLCODE=-727, SQLSTATE=56098, DRIVER=4.26.14

如果它在dogfood 中有一行,我只想订购它。一个解决方案是在 select 子句中查询结果并在 order by 子句中引用它,但我希望它在我的应用程序的 order by 子句中。我很好奇为什么这个查询不起作用,我仔细检查了语法错误,但我找不到任何错误。我错过了一些明显的东西吗?我希望我可以按照我在 select/from 子句中查询的顺序引用一个表。

【问题讨论】:

    标签: sql db2


    【解决方案1】:

    documentation

    排序键表达式 不是简单的列名或无符号整数常量的表达式。应用排序的查询必须是 subselect 使用这种形式的排序键。 排序键表达式不能 包括相关标量全选 (SQLSTATE 42703) 或函数 使用外部操作 (SQLSTATE 42845)。

    但由于它不相关,您可以将IN 与全选一起使用

    select *
    from dog
    order by 
      case when dog.dogid in (select dogid from dogfood)
          then '1' else '0' end;
    

    【讨论】:

      猜你喜欢
      • 2017-01-08
      • 2014-09-16
      • 2021-07-03
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多