[pgsql-jp: 37568] LIKE検索の結果取得の方法について

Yokota yokota @ software.sanix.jp
2006年 10月 10日 (火) 12:06:51 JST


はじめて投稿します。yokotaと申します。宜しくお願いします。
PostgreSQL 8.1.4を使用しています。
早速ですが、LIKE検索した結果を一件に絞り込む方法について質問です。

・やりたいこと:データ「TBL1」でマスタ「TBL2」から
        必要な項目を取得し結果を返したい。
・TBL2から取り出すときの条件:
		データ「TBL1」のITEM01かITEM02が、
		マスタ「TBL2」のITEM1かITEM2にLIKE検索
		でヒットした”一件”のデータを抽出したい。
		※一件取得できれば、一件目orMIN値orMAX値でもOK
・結果に欲しい情報:TBL1.*, TBL2.KEY, TBL2.その他属性値

----TBL1(データ)---
KEY  ITEM01  ITEM02
---+--------+--------
A   A1       B1
B   A2       B2
C   A3       B3
------TBL2(マスタ)---------------
KEY  ITEM1    ITEM2   その他属性値
---+--------+--------+-------------
X   A11      A12   **
Y   A25      A11      ***
Z   A26      A12      ****

上記のテーブルから、下記のSQLを作成しました。
が、複数件抽出した後に、一件に絞込みができません。
------------------------------------------------------------
SELECT TBL1.*, TBL2.KEY, TBL2.その他属性値
FROM TBL1
LEFT JOIN
     (SELECT MIN(KEY) AS KEY, ITEMALL
      FROM (SELECT KEY       FROM TBL2
            UNION ALL
            SELECT KEY, ITEM1 FROM TBL2
            UNION ALL
            SELECT KEY, ITEM2 FROM TBL2
      ) AS ITEMALLLIST
       GROUP BY ITEMALL) AS ITEMLIST
ON TBL1.ITEM01 LIKE '%' || ITEMLIST.ITEMALL || '%' OR
   TBL1.ITEM02 LIKE '%' || ITEMLIST.ITEMALL || '%'
LEFT JOIN TBL2 ON ITEMLIST.KEY = TBL2.KEY
------------------------------------------------------------
(LEFT JOIN内のUNION ALLの結果↓)
---ITEMALLLIST----⇒---ITEMLIST-------
KEY  ITEMALL   |KEY  ITEMALL
----+--------	 |----+--------
X   		 |X
X   A11		 |X   A11
X   A12		 |X   A12
Y		 |Y
Y   A25		 |Y   A25
Y   A11		 |Z
Z   		 |Z   A26
Z   A26
Z   A12

マスタからの情報を少しでもヒット率を高めたいため、既存のSQLに上記の内容
を組み込もうとしています。
一件に絞り込める方法はありませんでしょうか?
みなさまのお力をお借りしたく、どうかご教授のほどよろしくお願い致します。







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