SQLパズル
同期から出された問題、難易度高い。そもそも解けるかどうか検証してないとのこと。無理なら無理でその証明がほしいよなー。
環境はMySQL5系を想定。
登場するテーブル
item
item_id | integer |
---|---|
item_name | varchar(255) not null |
PK(item_id)
category
category_id | integer not null |
---|---|
category_name | varchar(255) not null |
PK(category_id)
item_category
item_id | integer not null |
---|---|
category_id | integer not null |
PK(item_id,item_category)
アイテムとカテゴリの関係はn:n。カテゴリというかタグだね。
どのカテゴリにも属さないアイテムも存在する。
問題
各カテゴリに所属しているアイテムをランダムに5件ずつ取得せよ。ただし結果に同じアイテムが複数出現しないこと。
- どのカテゴリにも属してないアイテムについても5件出す
- できればワンクエリで。
出力例
category | item |
---|---|
cat_a | item_1 |
cat_a | item_2 |
... | |
cat_a | item_5 |
cat_b | item_6 |
cat_b | item_7 |
... | |
NULL | item_x |
... |
雑感
ちょうむずかしい。手続き型言語と組み合わせることなく可能なんだろうか。
ユニーク制約なし、各カテゴリ5件取ってくるだけでも難しい。