前提・実現したいこと
下記のような、あるキャラクタの各種別とその値を格納しているテーブルがあるとすると、これらの種別の全組み合わせをSQLで出力したいのですが、うまく行かなくて困っています。
types
id | name |
---|---|
1 | 撃種 |
2 | 属性 |
3 | 戦型 |
values
id | type_id | value |
---|---|---|
1 | 1 | 反射 |
2 | 1 | 貫通 |
3 | 2 | 火 |
4 | 2 | 水 |
5 | 2 | 木 |
6 | 2 | 光 |
7 | 2 | 闇 |
8 | 3 | パワー型 |
9 | 3 | バランス型 |
10 | 3 | スピード型 |
11 | 3 | 砲撃型 |
この2つのテーブルを使って下記のような全組み合わせ一覧を表示するSQLを作りたいです。
no | pattern |
---|---|
1 | 撃種:反射,属性:火,戦型:パワー型 |
2 | 撃種:反射,属性:火,戦型:バランス型 |
.. | ... |
40 | 撃種:貫通,属性:闇,戦型:砲撃型 |
撃種2種 × 属性5種 × 戦型4種 = 40レコード
使用するデータ
postgreSQLのインポート用のSQLのサンプルを載せておきます。
試しているバージョンは、9.5です。
sql
1CREATE TABLE types 2( 3 id SERIAL NOT NULL, 4 type VARCHAR 5); 6INSERT INTO types (type) VALUES ('撃種'),('属性'),('戦型'); 7CREATE TABLE values 8( 9 id SERIAL NOT NULL, 10 type_id INTEGER, 11 value VARCHAR 12); 13INSERT INTO values (type_id, value) VALUES 14(1,'反射'),(1,'貫通'), 15(2,'火'),(2,'水'),(2,'木'),(2,'光'),(2,'闇'), 16(3,'パワー型'),(3,'バランス型'),(3,'スピード型'),(3,'砲撃型');
試したこと
WITH RECURSIVEを使うとできるのではと思ったのですが、今のところできていません。
https://www.postgresql.jp/document/9.5/html/queries-with.html
また、下記のようにPL/pgSQLで実現しようとしてみたのですが、今のところできていません。
sql
1DO 2$$ 3DECLARE 4 r1 RECORD; 5 r2 RECORD; 6BEGIN 7 FOR r1 IN SELECT * FROM types LOOP 8 FOR r2 IN SELECT * FROM values WHERE type_id = r1.id LOOP 9 ... 10 END LOOP; 11 END LOOP; 12END; 13$$;
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/17 23:43
2021/08/18 03:56