私は、顧客、チェーン、およびキャンペーン用のテーブルを持つOracleデータベースを使用しています。そのように(取り除いた):
TABLE CUSTOMER
ACCOUNTNUMBER VARCHAR2
CHAIN VARCHAR2
CATEGORY VARCHAR2
TABLE CHAIN
CODE VARCHAR2
PARENTCHAIN VARCHAR2
TABLE CAMPAIGN
ID NUMBER
DISCOUNT NUMBER
TABLE CAMPAIGN_ELIGIBILITY
CAMPAIGNID NUMBER --ID of the campaign
ACCOUNTNUMBER VARCHAR2 --Customer included in the campaign
CHAINCODE VARCHAR2 --Chain included in the campaign
CUSTCATCODE VARCHAR2 --Customercategory included in the campaign
顧客は、定義された顧客グループを通じて、またはチェーンのメンバーとして、具体的に(アカウント番号に基づいて)キャンペーンの対象となることができます。
このクエリを使用して、特定の顧客に有効なすべてのキャンペーンを検索します。
select * from campaign where id in
(
select unique campaignid from campaign_eligibility where
accountnumber=:accountnumber
union
select unique campaignid from campaign_eligibility where
chaincode =
(select chain from debtable where accountnumber=:accountnumber)
union
select unique campaignid from campaign_eligibility where
custcatcode =
(select category from customer where accountnumber=:accountnumber)
)
ここで、顧客「Popeye Spinach Empire」が、チェーン「Spinach Dealers Inc.」のメンバーであり、チェーン「Spinach Dealers Inc.」が、より大きなチェーン「GreenFud R US」の一部であり、チェーン「FoAC」のメンバーであるとします。 "。「GreenFudRUS」をターゲットにしたキャンペーンがある場合、Popeyeはそのキャンペーンの対象となります。私のクエリは、Popeyeが特別に追加されたキャンペーン、または「SpinachDealersInc。」を対象とするキャンペーンのみを返します。
顧客が間接的に参加しているキャンペーンを含めるようにクエリを変更するにはどうすればよいですか?