私はCNSMR_ACCNT_TAG
というテーブルを持つデータベースを持っています。このテーブルはの番号を持ち、関連するタグはtag_id
によって識別されます。このテーブルはtag_id
によってタグテーブルにリンクされています。タグテーブルはtag_typ_id
によってtag_typ
テーブルにリンクされています。だから... ...具体的には、SQLを使用してエリアタグを抽出する
Select * from cnsmr_accnt_tag cat inner join tag t on cat.tag_id = t.tag_id inner join tag_typ tt on t.tag_typ_id = tt.tag_typ_id
排他的であるそのうちのいくつかのタグの様々な種類があります - 例えば、消費者のアカウントは、一度に1つの領域にあることができるが、いくつかのタスクであってもよいです。 1つのアクティブエリアタグがありますが、潜在的に1つまたは複数のタスクタグがあります。私はそれがでますどの領域を含むcnsmr_accnt
に関するデータの束を取得する必要があります。
私がやっている何を
は面積を返すサブクエリを持つクエリを持つことです。このアプローチの欠点は、多くのアカウントがあり、ALL cnsmr_accnts
の領域を戻すことが遅いことです。そのようなクエリを書くより良い方法があるので、私は各口座の領域を取り戻すことができますか?
次のように私が実行しているクエリは基本的に次のとおりです。
Select distinct
REPLACE(LTRIM(REPLACE(cnsmr_accnt_idntfr_lgcy_txt, '0', ' ')), ' ', '0') as ACCNT_NUMBER
,AREA
,[wrkgrp_nm]
,wrkgrp_shrt_nm
,other_fields_here
from cnsmr c
inner join cnsmr_accnt ca
on c.cnsmr_id = ca.cnsmr_id inner join wrkgrp w on c.wrkgrp_id = w.wrkgrp_id inner join cnsmr_accnt_tag cat
on ca.cnsmr_accnt_id = cat.cnsmr_accnt_id
inner join tag t
on cat.tag_id = t.tag_id
inner join tag_typ tt
on t.tag_typ_id = tt.tag_typ_id
inner join
(select cnsmr_accnt_id, tag_nm as AREA from tag t inner join tag_typ tt
on t.tag_typ_id = tt.tag_typ_id
inner join cnsmr_accnt_tag cat on
t.tag_id = cat.tag_id
where
tag_typ_shrt_nm = 'AREA'
and cnsmr_accnt_sft_delete_flg = 'N') as AREA_TAG on
cat.cnsmr_accnt_id = AREA_TAG.cnsmr_accnt_id