mysql 按照顺序匹配,有优先级
程序员文章站
2022-05-23 09:25:54
...
--需求: 根据企业名称,企业三码(社会信用代码,社会组织代码,注册号),在企业表查找企业.
如果有多个参数匹配到不同企业名称,比如,企业名称匹配到A公司,社会信用代码匹配到B公司.
这种情况优先匹配顺序是,企业名称->社会信用代码->社会组织机构代码->注册号.
下面是sql实现:
select
CASE
<if test="companyName != null and companyName !='' ">
WHEN a.company_full_name = #{companyName,jdbcType=VARCHAR} THEN 1
</if>
<if test="creditCode != null and creditCode !='' ">
WHEN a.unite_code = #{creditCode,jdbcType=VARCHAR} THEN 2
</if>
<if test="orgCode != null and orgCode !='' ">
WHEN a.organization_code = #{orgCode,jdbcType=VARCHAR} THEN 3
</if>
<if test="regNo != null and regNo !='' ">
WHEN a.trade_register_code = #{regNo,jdbcType=VARCHAR} THEN 4
</if>
WHEN 1=1 THEN 5
ELSE 5 END as i,
a.company_id as "companyId",
a.company_full_name as "companyName"
from ebd_coding_company_name a
where 1=2
<if test="regNo != null and regNo !='' ">
or a.trade_register_code = #{regNo,jdbcType=VARCHAR}
</if>
<if test="orgCode != null and orgCode !='' ">
or a.organization_code = #{orgCode,jdbcType=VARCHAR}
</if>
<if test="creditCode != null and creditCode !='' ">
or a.unite_code = #{creditCode,jdbcType=VARCHAR}
</if>
<if test="companyName != null and companyName !='' ">
or a.company_full_name = #{companyName,jdbcType=VARCHAR}
</if>
order by i limit 1
如果有更好的见解,欢迎大神留言沟通.
推荐阅读
-
C语言:保持数列有序:有n(约定n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
-
牛牛举办了一场数字游戏,有n个玩家参加这个游戏,游戏开始每个玩家选定一个数,然后将这个数写在纸上(十进制数,无前缀零),然后接下来对于每一个数字将其数位按照非递减顺序排列,得到新的数,新数的前缀零将被
-
mysql按照特定顺序搜索数据
-
mysql - 关于 PHP 中订单按照从大到小的顺序排序的思路.
-
mysql查询结果排序,name字段有中文名字,有英文名字,如何按a-z的顺序把名字排序
-
mysql的有顺序的随机排序需求
-
数据库-mysql进行匹配的时候可否调整匹配的顺序?
-
mysql 按照顺序匹配,有优先级
-
(动态规划)有 n 个学生站成一排,每个学生有一个能力值,从这 n 个学生中按照顺序选取kk 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 kk 个学生的能力值的乘积最大,返回最大的乘积
-
PHP+MySQL如何按照某个特定字段的顺序读取数据?