これを行うための標準的なSQLの方法は、2つのテーブルを使用することです。
create table routine (
id serial primary key,
name text
);
create table exercises (
routine_id integer references routine(id) on delete cascade /*optional*/,
exercise text
);
Postgresは、1回の演習でルーチンを作成するための優れた構文(100%標準ではありませんが)を提供します。
with new_routine_id as (
insert into routine(name)
values ('Chest')
returning id
)
insert into exercises
select id, unnest(array['Bench Press', 'Skull Crusher', 'Incline Bench Press'])
from new_routine_id
選択はあなたが期待する通りです:
select id, name, array_agg(exercise order by exercise /*it could be ordered using an additional field*/) as exercises
from routine
join exercises on id = routine_id
group by id, name
編集@klinは、演習用の配列を直接含む1つのテーブルを使用した代替ソリューションを投稿しました。この解決策は完全に有効であり、いくつかの点で私のものよりも単純です(結局、最初のコメントでこの解決策についてすぐに言及しました)。
私見ですが、ソリューションが他のソリューションよりも「優れている」理由は1つあります。誰もが配列の処理方法を知っているチームで働いていますか?
JOIN
、配列なしで通常の方法で実行できます。この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加