mysql多字段查询 按照传入顺序 进行自定义排序

本文探讨了在SQL查询中如何根据预定义的参数顺序进行排序的问题,避免了使用简单的ORDER BY字段名或动态变量的方法。通过案例展示了如何在Oracle数据库中使用CASE语句结合OR条件来实现列表参数顺序的排序。同时,在MyBatis中,利用foreach标签可以方便地实现这一功能。注意在实际应用中要避免常见的误区,确保查询结果符合预期。
摘要由CSDN通过智能技术生成
注:标准sql语法 oracle通用

场景:参数为List<实体类> list ,
list(0) : busLv = “aa” seatLv=“xxxxx”
list(1) : busLv = “xxx” seatLv=“xxx”
list(2) : busLv = “bb” seatLv =“xxxx”
需要 把查询结果按照传入的list参数顺序进行排序

 SELECT s.* FROM s_bus_type s
        WHERE (s.BUS_LV = '001003' and s.SEAT_LV = '002003')
				or (s.BUS_LV = '001001' and s.SEAT_LV = '002001')
				or (s.BUS_LV = '001002' and s.SEAT_LV = '002002')
        ORDER BY
				case when s.BUS_LV = '001003' and s.SEAT_LV = '002003' then 0
				when  s.BUS_LV = '001001' and s.SEAT_LV = '002001' then 1
				when  s.BUS_LV = '001002' and s.SEAT_LV = '002002' then 2
				end  asc
在mybatis 中 用foreach即可在这里插入图片描述

注意误区:
1、不能用order by busLv,seatLv 这个不解释了
2、 不能用order by field(字段,list .foreach) 该情况只适用于单参数
3、 不能使用动态变量的形式 ,例如

        SELECT @mark := @mark + 1 AS mark,
        s.*
        FROM
        (SELECT  @mark := 0) t ,
        s_bus_type s
        WHERE (s.BUS_LV = '001003' and s.SEAT_LV = '002003')
				or (s.BUS_LV = '001001' and s.SEAT_LV = '002001')
				or (s.BUS_LV = '001002' and s.SEAT_LV = '002002')
        ORDER BY mark 

在这里插入图片描述

如图: 查询并不按or条件顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孟秋与你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值