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#'。これは、実際には並べ替えに影響しない単なる定数文字列値です。

ではUNIONORDER 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 に答える