#背景
いま、とあるAI分類アプリケーション開発をやっています。
仕様としては、階層構造になったラベルデータがあり、それを群管理せるために、
子ラベルを親ラベルに振り替える、いわゆる名寄せクエリを検討しています。
#テーブル nayose_table
nayose_tableはH10→H20→H30→H40というように、
親子関係になっていて、N10,N20,N30,N40には、別のクエリで作成した、
名寄せラベルが入っています。
例えばですが、
- H40にあるZCSXXというラベルは、本来はH10のYYZに属していますが、
分類時にYYZというクラスターから分離したいために、
N10には、YYZ/ZD/KDNXX/ZCSXXというラベルに付け替えしています。
- H40にあるZAAATQ,ZBBBTQというラベルは、性質が近いために、
分類時にはKDNXXという親のラベルに名寄せしており、
N10には、YYZ/ZD/KDNXXというラベルに付け替えしています。
- H30にあるSSSXX,UUUXXというラベルは、性質が近いために、
分類時にはZDという親のラベルに名寄せしており、
N10には、YYZ/ZDというラベルに付け替えしています。
id H10 H20 H30 H40 N10 N20 N30 N40 7 YYZ ZD KDNXX ZCSXX YYZ/ZD/KDNXX/ZCSXX ZD/KDNXX/ZCSXX KDNXX/ZCSXX ZCSXX 8 YYZ ZD KDNXX ZCSOTQ YYZ/ZD/KDNXX/ZCSOTQ ZD/KDNXX/ZCSOTQ KDNXX/ZCSOTQ ZCSOTQ 9 YYZ ZD KDNXX ZAAATQ YYZ/ZD/KDNXX ZD/KDNXX KDNXX ZAAATQ 10 YYZ ZD KDNXX ZBBBTQ YYZ/ZD/KDNXX ZD/KDNXX KDNXX ZBBBTQ 11 YYZ ZD SSSXX FDSFDS YYZ/ZD/ ZD SSSXX FDSFDS 12 YYZ ZD UUUXX LLKKKD YYZ/ZD/ ZD UUUXX LLKKKD
#テーブル pm_master
マスターテーブルは、valueにラベルが入っていますが、
基本的にはH10,H20, h30, H40の、どの階層に属するラベルが入るか
決まっていません。
id value 出したいイメージ 現状 1 ZCSXX -----> H40に属するラベル YYZ/ZD/KDNXX/ZCSXX YYZ/ZD/KDNXX/ZCSXX --> 〇 2 ZCSOTQ -----> H40に属するラベル YYZ/ZD/KDNXX/ZCSOTQ YYZ/ZD/KDNXX/ZCSOTQ --> 〇 3 KDNXX -----> H30 に属するラベル YYZ/ZD/KDNXX YYZ/ZD/KDNXX/ZCSXX --> × 4 ZD -----> H20 に属するラベル YYZ/ZD YYZ/ZD/KDNXX/ZCSXX --> ×
#クエリ
N10に名寄せしたい場合に下記のクエリを書いています。
今のところH10,H20,H30,H40の何れかに合致したものを選んでおり、
重複除外のためGROUP_BYしていますが、ID順で最初に出てくるものに
纏められてしまいます。
sql
1 SELECT palcom_master.*, 2 nayose_table.N10 3 4 FROM db_palcom.palcom_master 5 inner join 6 nayose_table 7 on 8 (db_palcom.palcom_master.value like nayose_table.H10 || ',%') or 9 (db_palcom.palcom_master.value like nayose_table.H20 || ',%') or 10 (db_palcom.palcom_master.value like nayose_table.H30 || ',%') or 11 (db_palcom.palcom_master.value like nayose_table.H40 || ',%') 12 13 GROUP BY palcom_master.id
# やりたいこと
以下のように階層の下から、順番にサーチしていくような、クエリにできないものでしょうか?
- H40でマッチング あり → ok
- なし → H30でマッチング → あり → ok
- なし → H20でマッチング → あり → ok
- なし → H10でマッチング
#補足
最初はINSTR関数で、N10のラベルを'/'でSPLITして、文字列を直接探す方法にしていましたが、
これだと時間がかかりすぎるので、検索はあくまでH10~H40のラベルで実施したいです。
回答3件
あなたの回答
tips
プレビュー