我正在运行此查询,但出现错误
select *
from dog
order by case
when exists(
select 1 from dogfood where dog.dogid = dogfood.dogid)
then '1'
else '0' end;
因此,两个表dog
和dogfood
都有一个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子句中查询的顺序引用表。
1条答案
按热度按时间mtb9vblg1#
请参阅documentation
sort-key-expression不仅仅是列名或无符号整数常量的表达式。要应用排序的查询必须是子选择才能使用这种形式的sort-key。**sort-key-expression不能包含相关标量fullselect(SQLSTATE 42703)**或具有外部操作的函数(SQLSTATE 42845)。
但是,由于它不相关,因此可以将
IN
与fullselect一起使用