[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 メーリングリストの案内