条件1でソートしたものと、条件2でソートしたものをユニオンで結合しようとしたらソートが効かずにどっぷりハマりました。
結論から書きますが、ユニオンは内部でソートしても効きません
しかし裏技がありました。
まずは想定ですが、人気の野球選手ベスト三位と、人気のサッカー選手ベスト三位をくっつけたテーブルを取得したいとします。
まずダメな例から書きます.
(select * from baseball_player order by vote DESC limit 3)
union
(select * from soccer_player order by vote DESC limit 3)
まんまとハマったやつです。
上のクエリも下のクエリも独立でなら正しい結果を吐きますが、ユニオン内部だとソートが効かないので、無意味です。
そこで裏技!!
結構よくあることなのですが、””テーブルに包む””とうまく行ったりします。
何を言ってるのかわからないと思うが俺にも(ry
select * from ((select * from baseball_player order by vote DESC limit 3)) tbl1
union
select * from ((select * from soccer_player order by vote DESC limit 3)) tbl2
なぜかこうするとユニオン内にも関わらずソートが効きます。
おそらく、テーブルに直すことで先にその中のクエリを作ってくれるんだと思います。
4 - 2 * 5 = -6
を
(4 - 2) * 5 = 10
に直すようなイメージで、ときどきこうしてテーブルに直すことがあります。
SQLの不具合基準ってよくわからないものが多いですよね。