[pgsql-jp: 26115] Re: 3つ以上のテーブルを無条件に結合する方法

WADA Hiroyuki wada @ komine-ag.co.jp
2002年 5月 24日 (金) 12:27:12 JST


和田です。

"K.Ohyama" wrote:

>  それならアプリケーション側で3回 SELECT してもらう方が手っ取り早くて
> 無駄が無いっすね。

そのとおりで、

>  今回やろうとしているのは6つテーブルがあったため、
> 「6回も SELECT させるのもどうだか...」
> って思ったわけなんですが...。

もともと無関係なテーブルを結合させる方が無駄だと思います。

無理やりこんなこともできなくもないですが、ソートされてしまいます。
(iが重複するとだめです。)

SELECT t1.count,t1.i,t1.j,t2.i,t2.j,t3.i,t3.j FROM
(SELECT count(*),t1a.* FROM 
t1 AS t1a, t1 AS t1b
WHERE t1a.i >= t1b.i
GROUP BY t1a.i,t1a.j
ORDER BY t1a.i 
) AS t1
FULL JOIN
(SELECT count(*),t2a.* FROM
t2 AS t2a, t2 AS t2b
WHERE t2a.i >= t2b.i
GROUP BY t2a.i,t2a.j
ORDER BY t2a.i 
) AS t2
ON(t1.count=t2.count)
FULL JOIN
(SELECT count(*),t3a.* FROM 
t3 AS t3a, t3 AS t3b
WHERE t3a.i >= t3b.i
GROUP BY t3a.i,t3a.j
ORDER BY t3a.i 
) AS t3
ON(t1.count=t3.count)



pgsql-jp メーリングリストの案内