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に移行するという事情に
よるもので。カスタマイズ出来るとしても、
各テーブル内で(ほぼ)完結した変更のみとなって
おります。
どなたか分かる方がいらっしゃいましたら
ご教示の程お願い致します。
以上、よろしくお願い致します。