1

在 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的情况下它不启动?

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

4

2 回答 2

2

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

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

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

于 2013-10-09T10:57:07.743 回答
1

2017 更新:如果将 UNIONed 查询包装在另一个选择中,则可以在 ORDER BY 中使用计算值:

select * from (
    <query1>
    UNION
    <query2>
    UNION
    <etc...>
)
order by <calculated expression>
于 2017-09-29T23:22:27.807 回答