[pgsql-jp: 38819] Re: 3種類の値を持つ6つの項目の検索方法

Aoi OGAWA aoi.ogawa @ ctc-g.co.jp
2007年 9月 25日 (火) 15:12:18 JST


おがわあおいです。
こんにちは。

PostgreSQLの性格はあまり把握はしていないのですが、こんな方法もあるよ、と
いう程度に見ていただければ助かります。

CREATE TABLE img (
    imgno   serial PRIMARY KEY,
    datah   varbit,
    datal   varbit,
    data    int[]
);

CREATE TABLE img_sub (
    imgno     int,
    datatype  int,
    data      int,
    primary key(imgno, datatype)
);

datatypeには1〜6の数値が入ります。
data1〜data6のどれなのかを判断するものです。
data1〜data6の中身は、dataに入ります。

select * from img i
where exists
  (select * from img_sub s
   where s.imgno = i.imgno
     and exists (select * from
                   (select 1 hikaku where hikaku_val=1
                    union
                    select 2 hikaku where hikaku_val=1
                    union
                    select 1 hikaku where hikaku_val=2
                    union
                    select 2 hikaku where hikaku_val=2
                    union
                    select 3 hikaku where hikaku_val=2
                    union
                    select 2 hikaku where hikaku_val=3
                    union
                    select 3 hikaku where hikaku_val=3
                   ) t
                 where t.hikaku=s.data)
   );

上記SQLのhikaku_varは「比較データ」のことです。

-- 
SELECT
  'Aoi OGAWA' as name,
  'ITOCHU Techno-Solutions Corporation' as company,
  'aoi.ogawa @ ctc-g.co.jp' as e-mail
FROM PERSONAL_DATA
WHERE ID is ME



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