Mysql一个字段同时满足多个查询条件

发表于  菜鸟之路   2016-07-22   字数:856   阅读量: 366    字号:   赞: 1    

Mysql一个字段同时满足多个查询条件

做订单项目时需要查询退货退款订单,由于并没有专门为退货退款这种情况设定一个状态,所以要去查订单的流程表,如果一个订单既有过发货记录又有过退款记录就将该订单拎出来,思路明白了之后在查询数据库的时候遇到了一些问题。
数据库表名叫order_proc,是订单的流程信息表,第一列是订单编号,第二列是订单状态。假设”AS”代表发货,”RG”代表申请退款,现在的目的就是将同时有过这两种记录的订单编号找出来。
Mysql一个字段同时满足多个查询条件
首先利用AND关键字是肯定行不通的!下面这条SQL语句得到的结果必然为空:

1
SELECT FROM order_proc WHERE `status`='AS' AND `status`='RG';  

之后想到用OR或者IN,也都是行不通的,OR和IN关键字只能查询出满足status这个字段其中之一的情况,并不能查出一个字段同时满足的情况。

1
2
SELECT FROM order_proc WHERE `status`='AS' OR `status`='RG';  
SELECT FROM order_proc WHERE `status` IN("AS","RG");  

本打算放弃继续探索,在应用层直接处理:可以先分别查出status=”AS”和status=”RG”两种情况下的所有订单,存到两个list里面,再用retainAll()方法求两个list的交集,即可以达到目标,不过这样的代码实在太繁琐,而且效率低下,非常不推荐使用!那么有没有办法一条SQL语句达到我上述要求呢?答案是有的!

1
2
3
4
5
6
7
8
SELECT
    a.*
FROM
    order_proc a
LEFT JOIN order_proc b ON a.`order_no` = b.`order_no`
WHERE
    a.`status` = 'AS'
AND b.`status` = 'RG';

之前用过联表查询,但都是两张不同的表连起来,当自身和自身连表的时候就可以达到一个字段同时满足多个条件查询的妙用!


已有 0 条评论