Android 按项排序不在结果集中

Android 按项排序不在结果集中,android,sqlite,union,android-sqlite,Android,Sqlite,Union,Android Sqlite,在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 wher

在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)的等效方法似乎有效 好的

结果中是否存在按条款排序的限制 设置如果是这样的话,为什么没有工会的支持就不能生效呢


我曾经从用户中选择all,因此它应该从用户表中获取所有列。那么为什么会出现这种异常?

如果列的名称是MCTD%23,则必须使用该名称来引用该列。 %转义是HTTP协议的一项功能,不在SQL中使用

MCTD在没有UNION的情况下工作的原因是它实际上没有引用列。不使用UNION时,可以在ORDERBY子句中使用任意表达式。如果找不到带引号的列名,那么为了与MySql兼容,MCTD将被解释为“MCTD”,它只是一个常量字符串值,实际上不会影响排序


使用UNION时,ORDER BY不允许使用任意表达式,只允许结果集中的实际列名,因此无法将MCTD解释为字符串值。

2017更新:如果将UNION查询包装在另一个select中,则可以通过以下方式按顺序使用计算值:

select * from (
    <query1>
    UNION
    <query2>
    UNION
    <etc...>
)
order by <calculated expression>

MCTD是用户表中的列名吗?我的用户表包含MCTD%23列,该列相当于ascii表示中的MCTD。虽然当我以相同的顺序执行单个select语句时,它们工作得很好,但是UNION导致了这个问题。但是,当我用MCTD%23替换MCTD时,它是有效的。但是为什么是这个而不是那个呢?好的,我明白了,但是为什么只有像MCTD这样的特殊列才被认为是一个常量字符串值,如果不使用并集的话。如果我使用任何其他没有任何特殊字符的任意列,那么即使没有UNION,我也会得到sqlite异常,没有这样的列:正如我所写的,这发生在带引号的列上。