我试图在这里避免2个查询..所以我要做的是首先,检查该表上是否存在数据..如果它确实存在,则从该表中获取数据..否则,查询到另一张桌子..我的脚本看起来像这样
select if( exists(
select 1
from emoney_promo.promo_participants pp
left join emoney_promo.promo_dtl_child pdc on pdc.active_promo_id = pp.id
where pp.applied_to = '4518'
),
(
select pdc.*
from emoney_promo.promo_participants pp
left join emoney_promo.promo_dtl_child pdc on pdc.active_promo_id = pp.id
where pp.applied_to = '4518'
),
(
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
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'
));
但它显示Error Code: 1241. Operand should contain 1 column(s)
有没有办法实现这个目标?再次,我试图避免2个查询,这就是我使用它的原因:)
答案 0 :(得分:1)
如上所述:当你的第一个查询没有返回任何记录时,第二个查询也不会(当你应用相同的标准时)。因此,您只需执行第一个查询,就可以得到结果。
无论如何,编写此类查询的典型方法是:
select a, b, c from ... -- <== first query
union all
select d, e, f from ... -- <== second query
where not exists (<first query again>)
至于性能:是的,您只向DBMS发送一个查询,从而节省时间。但是,组合查询比单独查询更复杂。这可能会花费更长的时间来执行。因此,我通常会进行两次单独的查询,但有时可能会有这样的组合查询(特别是当第一个查询几乎总是不返回任何行时)。