我使用的 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.”连锁店的成员,该连锁店又是较大连锁店“GreenFud R US”的一部分,而后者又是“FoAC”连锁店的一部分”。如果有针对“GreenFud R US”的广告系列,Popeye 就有资格参与该广告系列。我的查询将仅返回已明确添加 Popeye 或以“Spinach Dealers Inc.”为目标的广告系列。
如何修改我的查询以包含客户间接参与的营销活动?