私の目標は、2つの異なるクエリを実行し、それらを組み合わせることです。
私のコードは次のとおりです。
SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1
UNION
SELECT * FROM some tables WHERE ...
次のエラーが発生します。
#1221-UNIONとORDERBYの誤った使用法
ORDERBYは最初のクエリ専用であることが重要です。このタスクを実行するにはどうすればよいですか?
括弧を使用して、個々のクエリで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 */
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
は順序と重複の両方を保持しますすべてを丸括弧で囲むだけです。
(SELECT * FROM table1 ORDER BY datetime )
UNION
(SELECT * FROM table2 ORDER BY datetime DESC)
(SELECT user_id AS id FROM tbl_user)
UNION
(SELECT address_id AS id FROM tbl_address)
ORDER BY id ASC LIMIT 10