'user' と 'tracks' の 2 つのテーブルがあり、まだ 1 つも持っていない (userid=0) トラックごとにユーザーを作成したいと考えています。
ユーザーに必要な一意の電子メールがないため、generate_series を使用してダミーの電子メールを作成することを目指します。
insert into users (username, email)
select artist, (
select concat(generate_series(1, (SELECT COUNT(filename)
FROM tracks where userid = 0)),'@domain.com')
) as email
from tracks
where userid = 0
group by artist;
もちろんエラーが発生します:
'ERROR: more than one row returned by a subquery used as an expression'
2 つの SQL 呼び出しを使用して、親コード (Python) にループを実行させることもできますが、それを行う正しい方法は SQL ステートメント内だけだと思います。
では、どうすれば Insert ステートメントを select を「ループ」させることができるでしょうか?
期待される出力:
id | username | email
-----+-----------------------------------------------------------+-----------------------
62 | Sam Jackson | 1@infiniteglitch.net
63 | (unknown person) | 2@infiniteglitch.net
64 | Howard Cocel J. | 3@infiniteglitch.net