0
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 回返す必要があります。

4

1 に答える 1

0

次のようなものを使用できます。

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;

はこちら

于 2013-04-17T20:10:26.863 に答える