mysql 存储过程 where_MySQL存储过程:如果在WHERE中

我正在尝试通过以下方式选择一些数据:

SELECT column

FROM table

WHERE a = a1

AND (b = b1 OR b = b2 OR b = b3);

我要它做的是,如果b不等于b1,请检查b = b2.但是,如果b = b1,请勿检查其他条件.

该select语句的结果只能是一个条目.但是,在我没有的语句中,它检查所有三个条件,有时返回多行.同样,我希望它停止检查条件是否为真.

关于如何实施的任何想法?我尝试过案例,但没有成功…

先感谢您!

编辑

这是我尝试运行的实际查询.

INSERT INTO shipment_flights

(airlinename, flt_no, flt_date, destination, phone, depttime, arrivaltime, pcs, weight)

SELECT st.airlinename, flightno, flightdate, destination,

(SELECT phone

FROM carrierlocations

WHERE carriers_carrierid = (select carrierid from carriers where airlinename = st.airlinename)

AND (city = destination OR (city != destination AND

city = (SELECT city FROM airports WHERE iataid =

(SELECT airports_iataid FROM ratelegs

WHERE shipments_shipid = c.shipments_shipid))

))) phone,

depttime, arrivaltime, sum(linepcs), sum(lineweight)

FROM segment_times st

JOIN contents2flights c2f

ON st.flightid = c2f.segments_flights_flightid

AND st.segmentid = c2f.segments_segmentid

JOIN contents c

ON c.lineno = c2f.contents_lineno

AND c.shipments_shipid = c2f.contents_shipments_shipid

WHERE c.shipments_shipid = var_shipid

GROUP BY flightid

ORDER BY flightdate, depttime;

这是一个示例输出:

airlinename flt_no flt_date destination phone pcs weight

Everts Air Alaska CH1 2008-02-20 Hughes 9074502351 24 2121

该查询将一堆航班数据插入临时表.我遇到的麻烦是获取某个位置的电话号码.这部分如下:

(SELECT phone

FROM carrierlocations

WHERE carriers_carrierid = (select carrierid from carriers where airlinename = st.airlinename)

AND (city = destination OR (city != destination AND

city = (SELECT city FROM airports WHERE iataid =

(SELECT airports_iataid FROM ratelegs

WHERE shipments_shipid = c.shipments_shipid))))) phone

在阿米特·巴尔加瓦(Amit Bhargava)建议的查询中,仅当临时表中有一行时,我才能获得正确的结果.如果还有更多,则会在选择手机部件时引发错误.

“错误代码:1242.子查询返回的行数超过1”

解决方法:

请尝试以下方法.不是最优雅的解决方案,但它应该可以工作.

SELECT column

FROM table

WHERE a = a1

AND (b = b1 OR (b != b1 AND (b = b2 OR (b != b2 AND b = b3))))

标签:mysql,stored-procedures

来源: https://codeday.me/bug/20191101/1983386.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值