db2 如果不起作用,请按情况顺序使用表格

093gszye  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(183)

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

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

因此,两个表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,驱动程序=4.26.14
我只想对dog进行排序,如果它在dogfood中有一行的话。一个解决方案是在select子句中查询结果,并在orderby子句中引用它,但我想在我的应用程序的orderby子句中引用它。我很好奇为什么这个查询不起作用,我仔细检查了语法错误,但没有发现任何错误。我是否遗漏了一些明显的错误?我希望可以按照在select/from子句中查询的顺序引用表。

mtb9vblg

mtb9vblg1#

请参阅documentation
sort-key-expression不仅仅是列名或无符号整数常量的表达式。要应用排序的查询必须是子选择才能使用这种形式的sort-key。**sort-key-expression不能包含相关标量fullselect(SQLSTATE 42703)**或具有外部操作的函数(SQLSTATE 42845)。
但是,由于它不相关,因此可以将IN与fullselect一起使用

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

相关问题