Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql检查数据是否存在,否则查询到另一个表_Mysql_Sql - Fatal编程技术网

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