SELECT を使って、同じテーブルの内容で
レコードをかぶってる状態で取得したかった。
たとえば1回のクエリーを送るだけで、
ランキングで自身+100件とか取得出来れば楽だ(プロシージャーをCALLする等)
それではじめは、SELECT に as 適当な名前(例では t_colom)
にして、余計なカラムで順位をつけて取得するみたいなことをしていた。
(実験だから、自身のIDが下に結合されてついてます)
SELECT '1' as t_column, user_id FROM `xxx_table` LIMIT 3
UNION
SELECT '2' as t_column, user_id FROM `xxx_table`
WHERE
`user_id`='0003';
t_column | user_id |
1 |
0001 |
1 |
0002 |
1 |
0003 |
2 |
0003 |
しかし、UNION ってALL をつけると、重複してくれて、すべてを取得できる。
SELECT user_id FROM `xxx_table` LIMIT 3
UNION ALL
SELECT user_id FROM `xxx_table`
WHERE
`user_id`='0003';
user_id |
0001 |
0002 |
0003 |
0003 |
知らなかった・・・w
UNION DISTINCT がデフォルトで、
UNION って書く場合には、DISTINCT が指定されていることになっている。
知らなかった・・・ 知らなかった・・・
はじめ覚えた本にそんな事が書かれてなかった本で
それをずっと信じていた。
いっぱいあちこち見てみるもんだなぁ・・・
コメント一覧