select id,name,total_copies from contacts.
それが select ステートメントです。そのまま戻せる
結果は
1,john,1
2,peter,3
3,sara,2
私はそれが必要です
1,john,1
2,peter,2
2,peter,2
2,peter,2
3,sara,2
3,sara,2
つまり、total_copies = 3 の場合は行を 3 回返す必要があり、値が 5 の場合は行を 5 回返す必要があります。
次のようなものを使用できます。
SELECT contacts.*, n
FROM
(SELECT n1.n*10+n2.n n FROM
(SELECT 0 n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) n1,
(SELECT 0 n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) n2) numbers
INNER JOIN contacts ON contacts.total_copies>numbers.n
ORDER BY
id
ここでフィドルを参照してください。数値を含むインデックス付きテーブルを使用すると、クエリがより簡単かつ高速になります。
CREATE TABLE numbers (n int);
INSERT INTO numbers VALUES (0), (1), (2), (3), (4), (5);
SELECT contacts.*
FROM numbers INNER JOIN contacts
ON contacts.total_copies>numbers.n
ORDER BY id;
例はこちら。