我在SQLite中执行查询时遇到以下错误:
4th ORDER BY term does not match any column in the result set
我的查询:
select * from Users where deleted != 1 AND DATE(created) <= '2013-10-09' and
DATE(created) >= '2013-09-09T12:41:55.261Z' UNION select * from Users where deleted != 1 AND
owner NOT IN(Select userid from Customer)
order by Type DESC,License ASC,NUM ASC,"MCTD#" ASC,Name DESC;
然而,单个查询的等价物,即没有UNION 的似乎可行 细
是否存在 ORDER BY 条款必须包含在结果中的限制 组?如果是这样的话,如果没有 UNION ,为什么不这样做呢?
我曾经从用户中选择所有,因此它应该从User表中获取所有列。那为什么这个例外?
答案 0 :(得分:2)
如果列的名称为MCTD%23
,则必须使用该名称来引用该列。
%
转义是HTTP协议的一项功能,不在SQL中使用。
"MCTD#"
似乎在没有UNION
的情况下工作的原因是它实际上并不引用列。如果不使用UNION
,则可以在ORDER BY
子句中使用任意表达式。如果找不到引用的列名,那么为了与MySql兼容,"MCTD#"
被解释为'MCTD#'
,这只是一个实际上不影响排序的常量字符串值。
对于UNION
,ORDER BY
不允许任意表达式,只允许结果集中的实际列名,因此无法将"MCTD#"
解释为字符串值。
答案 1 :(得分:0)
2017更新:如果您将UNIONed查询包装在另一个选择中,则可以在ORDER BY中使用计算值:
select * from (
<query1>
UNION
<query2>
UNION
<etc...>
)
order by <calculated expression>