mysql:3806
From: Kentaro Furukawa <Kentaro Furukawa <furukawa@xxxxxxxxxx>>
Date: Fri, 22 Jun 2001 17:41:49 +0900
Subject: [mysql 03806] Re: 含まれていない ID をみつけだすような SQL
古川と申します。 > ここであるひとつのSQLを用いて、1から7までのうち空いているIDを出力とする、 > > +------+ > | id | > +------+ > | 4| > | 6| > +------+ > > という結果が欲しいときは、どういうSQLを書くのが高速でしょうか? これをそのまま取得できるわけではないですが、少なくとも「存在する数値全部 を取得して抜けているのをチェックする」ようなマネはしなくてすむ方法、なら 思いつきました。 前提条件として、最初と最後の数値(この例の場合は1と7)が番兵として必ず 存在するものとします(そうと限らなければ、0と8を INSERT しておくとよい でしょう)。存在する数値列を昇順に並べた時、隣り合った数値が2以上離れて いればその間が抜けていることになりますから、 SELECT MAX(h1.id) AS prev, h2.id AS curr >FROM hoge h1, hoge h2 WHERE h1.id < h2.id GROUP BY curr HAVING prev+1 < curr で、 prev curr --------- 3 5 5 7 を得て、prev+1 で始まり curr-1 で終わる数値列を作成していけば抜けている数 値列を求められます。 お役に立てていただければ幸いです。
3798 2001-06-21 02:07 [Kengo Nakajima <ring] 含まれていない ID をみつけだすような SQL 3803 2001-06-22 15:34 ┣[とみたまさひろ <tomm] 3805 2001-06-22 17:39 ┃┗[<endo_t@xxxxxxxxxx> ] 3804 2001-06-22 16:20 ┣[とみたまさひろ <tomm] -> 3806 2001-06-22 17:41 ┣[Kentaro Furukawa <fu] 3807 2001-06-22 18:58 ┗[松嶋祥文 <mats@xxxxx]