mysql:14226
From: Junichi MORI <Junichi MORI <mori@xxxxxxxxxx>>
Date: Tue, 25 Sep 2007 14:39:49 +0900
Subject: [mysql 14226] レコード件数を条件にしたSQL
はじめまして、森と申します。 MySQL 5.0.27を使用しています。 以下のケースについて、SQLの組み立てに難航して おりまして、ご相談させて頂きます。 [Table A] NAME, ID, NUM ------------- A 1 2 B 7 3 C 12 1 [Table B] ID, ...(他にもカラムがあります) 1 3 6 7 8 12 上記2つのテーブルを結合する必要があるのですが。 その条件は、 Table1の各レコードに、 Table2の同じIDから昇順にNUM件のレコードを結合する というものになります。 さらにデータの条件として、以下が有ります。 * ID値は不連続 * Table Aに紐付くBのIDは重複するケース有り * テーブルA,Bのレコード件数はそれぞれ約1千万件 上記条件より以下のテーブルが作成されます。 A.NAME, A.ID, A.NUM, B.ID, ... ------------------------------- A 1 2 1 A 1 2 3 B 7 3 7 B 7 3 8 B 7 3 12 C 12 1 12 そこで、以下のようなSQLを作ってみたのですが、 (LIMITは直値しか使えない?サブクエリで使えない?) 制限が有るようで。行き詰ってしまいました。 SELECT A.*, B.* FROM A, B WHERE B.ID IN ( SELECT ID FROM B AS 'B2' WHERE B2>=A.ID ORDER BY B2.ID LIMIT A.NUM ); 今回のケースではどのようなSQL文で実現出来る でしょうか?それともSQLではあきらめた方が よいのでしょうか? なお、このようなテーブル仕様となっているのは。 元は非RDBのデータをRDBに移行するという事情に よるもので。カスタマイズ出来るとしても、 各テーブル内で(ほぼ)完結した変更のみとなって おります。 どなたか分かる方がいらっしゃいましたら ご教示の程お願い致します。 以上、よろしくお願い致します。