テーブル
codelist
kind | code_key | code_value |
---|---|---|
status | 0 | 未着手 |
status | 1 | 作業中 |
status | 3 | 作業完 |
status | 5 | 確認中 |
status | 9 | 確認完 |
auth | 1 | 一般 |
auth | 3 | 管理者 |
auth | 9 | システム管理者 |
todo
id | title | status |
---|---|---|
1 | ○○○○○○ | 5 |
2 | △△△△△ | 9 |
3 | ☓☓☓☓☓ | 0 |
users
userid | username | auth |
---|---|---|
0001 | あいうえお | 1 |
0002 | 管理者A | 3 |
理想の結果
SQL
1create or replace function codes(_kind varchar(10)) 2returns table(****) as $$ 3begin 4return query select code_key, code_value from codelist where kind = _kind; 5end; 6$$language plpgsql;
codes('status')の結果
status | code_value |
---|---|
0 | 未着手 |
1 | 作業中 |
3 | 作業完 |
5 | 確認中 |
9 | 確認完 |
SQL
1select * from todo natural join code('status');
上記SQLの結果
id | title | status | code_value |
---|---|---|---|
1 | ○○○○○○ | 5 | 確認中 |
2 | △△△△△ | 9 | 確認完 |
3 | ☓☓☓☓☓ | 0 | 未着手 |
SQL
1select * from users natural join code('auth');
上記SQLの結果
userid | username | auth | code_value |
---|---|---|---|
0001 | あいうえお | 1 | 一般 |
0002 | 管理者A | 3 | 管理者 |
教えてほしいこと/やってみたこと
- plpgsqlのtable(***)の部分に「_kind」の値を列名として指定することは可能でしょうか?
- temporary table をplpgsqlで作成して値をinsert & select で結果を返すことはできましたが、やはりreturn tableの列名でつまずきました。
- 下記のようにエイリアスを指定でできることは確認しましたが、結合などを考えると他の方法が良いかと思っています。
SQL
1select * from codelist('status') as (status char(1), value varchar(10));

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/28 01:56
2018/04/28 06:59 編集