【发布时间】:2017-06-13 09:31:21
【问题描述】:
我很少有这样结构的表
Promo_Validation
id | promo_id | validation_type | validation_value
Promo_Counter
id | promo_id | tanggal | counter | member_id | mid
Promo_Dtl
id | promo_id | min_amount_trx | max_amount_trx | cashback_type | cashback_value | max_cashback_value
Promo_Participants
id | promo_id | applied_to | created_date
顺便说一句,这些表格用于促销机制..
所以promo_counter 表将计算已经有促销交易的用户.. 如果他们还没有完成促销交易,则在该表上没有创建记录
promo_validation 和 promo_dtl 表格是保存促销条款和条件的地方
promo_participants table 是加入促销的商家保存的地方
所以,我正在尝试创建一个将它们全部加入的查询,我想显示促销机制数据以及每个用户的计数(用户使用当前促销的次数等)。我的查询看起来像这样
select pp.id as pp_id, pv.id as pv_id, pv.validation_type as pv_validationtype, pv.validation_value as pv_validationvalue,
pc.id as pc_id, pc.tanggal as pc_tanggal, pc.counter as pc_counter, pc.member_id as pc_memberid, pc.mid as pc_mid,
pd.min_amount_trx as pd_minamounttrx, pd.max_amount_trx as pd_maxamounttrx, pd.cashback_type as pd_cashbacktype, pd.cashback_value as pd_cashbackvalue, pd.max_cashback_value as pd_maxcashbackvalue
from emoney_promo.promo_validation pv
join emoney_promo.promo_counter pc on pv.promo_id = pc.promo_id
join emoney_promo.promo_dtl pd on pd.promo_id = pv.promo_id
join emoney_promo.promo_participants pp on pp.promo_id = pv.promo_id
where pc.member_id = '0867667762'
and pp.applied_to = '4518'
and pc.mid = '4518';
当用户(在 member_id 列上)已经有 emoney_promo.promo_counter 表上的数据时,查询有效。但是当用户在 promo_counter 表中不可用时(该用户尚未完成促销交易),查询不会返回任何内容..
如果用户还没有完成任何促销(在上面的查询中,所以没有pc.member_id = 0867667762,我仍然可以获得结果吗?我的意思是,只需将null 给没有的列结果(来自 promo_counter 表),而不是什么都不返回?
对不起,如果我的话有点复杂顺便说一句:)
【问题讨论】:
-
您是否尝试使用
left join或outer join?检查一下! -
@AlbertoLópezPérez 我尝试将
join emoney_promo.promo_counter pc on pv.promo_id = pc.promo_id更改为left join emoney_promo.promo_counter pc on pv.promo_id = pc.promo_id,但结果相同.. 顺便说一句,我应该把左连接放在哪里? -
您必须将左连接放置在您要连接的表具有空值的位置,例如
select * from fulltable left join tablewithnulls on fulltable.notnull = tablewithnulls.maybenull