それで、
MySQL DBMS でのクエリに関する問題があります。repeats
次のようなデータを含むテーブルがあります。
+--------+-----+ | | レコード | 番号 | +--------+-----+ | | ふー | 2 | +--------+-----+ | | バー | 3 | +--------+-----+ | | バズ | 1 | +--------+-----+
ここでrecord
フィールドにはいくつかのデータが含まれており(無関係、単純な文字列としましょう)、num
フィールドには結果セット内の現在の行の繰り返し回数が含まれています。だから、私は結果を出したい:
ふー ふー バー バー バー バズ
つまり、2 回、 3 回、 1 回'foo'
繰り返されました。'bar'
'baz'
わかりました、今私が試したこと。テーブルを作成しました:
CREATE TABLE `natural` (
`id` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB
-次に、テーブルから1
まで、自然数で埋めました。この後、次の方法で目標を達成できます。MAX(num)
repeats
SELECT
`repeats`.record
FROM
`natural`
LEFT JOIN `repeats`
ON `natural`.id<=`repeats`.num
WHERE
`repeats`.record IS NOT NULL
-これはうまく機能しますが、natural
テーブルを使用したくありません。それで、私の質問は次のとおりです。一時的なデータ構造を作成せずに、単一の SQL クエリで行を繰り返すことで目標を達成することは可能ですか? (これは MySQL であるため、変数を使用したトリックも適合します。その方法は今のところわかりません)。ただし、 「いいえ、これは不可能です..」という回答も歓迎されます。
また、「一般的な」問題であると思われますが、残念ながら、対応する情報は見つかりませんでした. 更新:ここに同様の問題があります(ただし、同時に-回避したいシーケンス生成の問題も発生するため、完全には似ていません)