web-dev-qa-db-ja.com

ORDERBYおよびLIMIT後のUNION

私の目標は、2つの異なるクエリを実行し、それらを組み合わせることです。
私のコードは次のとおりです。

SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1 
UNION   
SELECT * FROM some tables WHERE ...

次のエラーが発生します。

#1221-UNIONとORDERBYの誤った使用法

ORDERBYは最初のクエリ専用であることが重要です。このタスクを実行するにはどうすればよいですか?

21
lvil

括弧を使用して、個々のクエリでORDER/LIMITを使用できるようにすることができます。

(SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0, 1)
UNION   
(SELECT * FROM some tables WHERE ...)
ORDER BY 1   /* optional -- applies to the UNIONed result */
LIMIT 0, 100 /* optional -- applies to the UNIONed result */
27
Salman A
SELECT * FROM (SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1) x
UNION ALL
SELECT * FROM some tables WHERE ...

UNION ALLの使用に注意してください。

  • UNIONは、結果セットから重複する行を削除し、DBはこれを行う前にall行を順序付けます(したがって、結果セット全体がソートされます)
  • UNION ALLは順序と重複の両方を保持します
10
Bohemian

すべてを丸括弧で囲むだけです。

(SELECT * FROM table1 ORDER BY datetime  )
UNION   
(SELECT * FROM table2 ORDER BY datetime DESC)
4
luca
(SELECT user_id AS id FROM tbl_user)
UNION
(SELECT address_id AS id FROM tbl_address)
ORDER BY id ASC LIMIT 10
2
Sona