読者です 読者をやめる 読者になる 読者になる

MySQL_自己結合の重複削除(順列)

MySQL プログラム

2つ結合するならば、

SELECT  a.id ,  b.id 
FROM     a_table  a,   a_table  b
WHERE  a.id  <>  b.id;

で済むが3つの場合は、WHERE句に以下を記載しなければならないので、

数が多いほど分かりづらくなる。

WHERE  a.id  <>  b.id
AND        b.id  <>  c.id
AND        c.id  <>  a.id

 

そんな訳で、NOT IN を使用。下記は4つの自己結合。

SELECT  a.id  AS a ,  b.id  AS b,  c.id  AS c,  d.id  AS d
FROM     a_table  a,   a_table  b,   a_table  c,   a_table  d
WHERE  b.id  NOT IN  (a.id)
AND        c.id  NOT IN  (a.id,  b.id)
AND        d.id  NOT IN  (a.id,  b.id,  c.id)

この結果は、 (1, 2, 2, 2) や (4, 4, 4, 4) などが除外されたレコードが取得される。

 総取得数は、テーブルのデータ数が5だとすると 5 * 4 * 3 * 2 かな。

 

こちらから
http://www.geocities.jp/mickindex/database/db_puzzle_math_a_cmb.html

 

これ考えた人凄いわ。

以上。

 


koshinran.hateblo.jp