android - 按不在结果集中的术语排序

标签 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 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 就不能启动?

我曾经从 Users 中选择全部,所以它应该从 User 表中获取所有列。那为什么会出现这个异常呢?

最佳答案

如果您的列名称是 MCTD%23,那么您必须完全使用该名称来引用该列。 % 转义是 HTTP 协议(protocol)的一个特性,不在 SQL 中使用。

"MCTD#" 似乎在没有 UNION 的情况下工作的原因是它实际上并不引用列。当您不使用 UNION 时,您可以在 ORDER BY 子句中使用任意表达式。如果未找到带引号的列名,则为了与 MySql 兼容,"MCTD#" 被解释为 'MCTD#',它只是一个常量字符串值实际上不影响排序。

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

关于android - 按不在结果集中的术语排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19267544/

相关文章:

android - 在 sqlite 中搜索,基于 String 获取描述

java - JCalendar - 使用正确的格式在 Java 中正确设置日期

java - 如何在Android中的SQLite数据库中查找TEXT或VARCHAR类型的特定列占用的内存(大小)?

MySQL:联合查询在 MySQL 5.5 上失败,在 MySQL 5.1 上工作

mysql错误表不能在全局order子句中使用

android - 如何在构建期间解决 Android Libraries 自定义属性和包名称重映射?

android - 警告:无法找到可选库:目标21中出现org.apache.http.legacy

View 上的 Mysql 索引不起作用

android - 从 Android 服务创建实时通知

android - 滚动内容时将页脚导航固定在移动视口(viewport)的底部