2つのテーブルがcustassets
ありtags
ます。INSERT INTO
いくつかのテストデータを生成するために、それぞれからランダムな行を取得する多対多のテーブルを作成したいと思いSELECT
ます(1つのテーブルのランダムな主キーが2番目のテーブルのランダムな主キーとペアになるようにします)。驚いたことに、これは私が最初に思ったほど簡単ではないので、私は自分自身を教えるためにこれを続けています。
これが私の最初の試みです。10custassets
と3を選択しますtags
が、どちらも同じです。最初のテーブルを修正しても問題ありませんが、割り当てられたタグをランダム化したいと思います。
SELECT
custassets_rand.id custassets_id,
tags_rand.id tags_rand_id
FROM
(
SELECT id FROM custassets WHERE defunct = false ORDER BY RANDOM() LIMIT 10
) AS custassets_rand
,
(
SELECT id FROM tags WHERE defunct = false ORDER BY RANDOM() LIMIT 3
) AS tags_rand
これにより、次のものが生成されます。
custassets_id | tags_rand_id
---------------+--------------
9849 | 3322 }
9849 | 4871 } this pattern of tag PKs is repeated
9849 | 5188 }
12145 | 3322
12145 | 4871
12145 | 5188
17837 | 3322
17837 | 4871
17837 | 5188
....
次に、次のアプローチを試しました。列リストの2番目のRANDOM()
呼び出しを実行します。SELECT
ただし、これは1つのタグPKを選択し、それに固執するため、さらに悪化しました。
SELECT
custassets_rand.id custassets_id,
(SELECT id FROM tags WHERE defunct = false ORDER BY RANDOM() LIMIT 1) tags_rand_id
FROM
(
SELECT id FROM custassets WHERE defunct = false ORDER BY RANDOM() LIMIT 30
) AS custassets_rand
結果:
custassets_id | tags_rand_id
---------------+--------------
16694 | 1537
14204 | 1537
23823 | 1537
34799 | 1537
36388 | 1537
....
これはスクリプト言語では簡単であり、ストアドプロシージャまたは一時テーブルを使用すると非常に簡単に実行できると確信しています。しかし、私はそれをただで行うことができINSERT INTO SELECT
ますか?
ランダム関数を使用して整数の主キーを選択することを考えましたが、残念ながら、両方のテーブルの主キーには増分シーケンスにギャップがあります(したがって、各テーブルで空の行が選択される可能性があります)。そうでなければそれは大丈夫だっただろう!