Mysql检查数据是否存在,否则查询到另一个表
我在这里尽量避免两个问题。。所以我要做的是首先,检查表上是否存在数据。。如果确实存在,则从该表中获取数据。。否则,查询到另一个表。。我的脚本是这样的Mysql检查数据是否存在,否则查询到另一个表,mysql,sql,Mysql,Sql,我在这里尽量避免两个问题。。所以我要做的是首先,检查表上是否存在数据。。如果确实存在,则从该表中获取数据。。否则,查询到另一个表。。我的脚本是这样的 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_
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'
));
但它显示了错误代码:1241。操作数应包含1列
有没有办法做到这一点?再一次,我试图避免两个查询,这就是为什么我使用这个:正如前面提到的:当第一个查询没有返回任何记录时,第二个查询也不会返回,因为您正在应用相同的条件。因此,您只需执行第一个查询,就可以得到结果,也可以不得到结果 无论如何,您描述的编写此类查询的典型方法是:
select a, b, c from ... -- <== first query
union all
select d, e, f from ... -- <== second query
where not exists (<first query again>)
至于性能:是的,您只向DBMS发送一个查询,这样可以节省时间。但是,组合查询比单独查询更复杂。这可能需要更长的时间来执行。因此,我通常会选择两个单独的查询,但有时使用这种组合查询可能是有意义的,尤其是当第一个查询几乎总是不返回任何行时。为什么要避免两个查询?这是IFboolean\u表达式,然后是\u值,else\u值,但不是为then\u值和else\u值分别选择一个值,但是有几个。这是行不通的。这就是错误消息所说的。顺便说一下,您的exists查询没有什么意义。你认为外部连接的作用是什么?是否存在一个pp记录,其中applied_to='4518'。外部联接另一个表不会改变这一点。如果在第一个查询中找不到applied_to='4518'的pp记录,那么在第二个查询中也找不到。@thekucay您是否注意到这是一个性能问题?如果你正确地编写了应用程序,并且可以对数据库进行一次或两次查询,而不是当前保证的两次查询,那么不应该这样做。如果是这样,那么我将尝试使用两次查询。谢谢你的建议:D