mysql-根据where子句中匹配列的优先级从db选择数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql-根据where子句中匹配列的优先级从db选择数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2537字,纯文字阅读大概需要4分钟。
内容图文
![mysql-根据where子句中匹配列的优先级从db选择数据](/upload/InfoBanner/zyjiaocheng/883/35486acaa91c47a5a3c32efd3975eae6.jpg)
嗨,我面临一个问题,
我有一种情况,我需要根据where子句中匹配列的优先级从db选择数据
例如我有桌子
Employee: FirstName, LastName, City, State.
我想根据条件搜索员工的记录.但是情况是,首先我需要获取所有四个条件(列)都匹配的记录,然后是所有四个条件(列)中的三个匹配的记录,然后是四个条件(列)中的两个的所有记录.匹配等等
为此,我根据情况创建动态查询,但是如果搜索条件的扩展范围更大,而不是我需要在查询中放置许多条件,则将难以管理动态查询.那么还有其他方法可以解决这个问题吗?
提前谢谢了.
解决方法:
这已经在SQL Server上进行了测试,但是如果不能立即使用,应该可以在MySQL上提供一个思路.
测试数据
IF OBJECT_ID('tempdb..#TestData') IS NOT NULL DROP TABLE #TestData
GO
CREATE TABLE #TestData (FirstName varchar(20), LastName varchar(20), City varchar(20), State varchar(20))
INSERT INTO #TestData (FirstName, LastName, City, State)
VALUES
('Jon','Snow','Winterfell','Westeros')
,('Jaime','Lannister','Riverrun','Westeros')
,('Margaery','Tyrell','Kings Landing','Westeros')
,('Cersei','Lannister','Kings Landing','Westeros')
,('Daenerys','Targaryen','Mereen','Essos')
,('Davos','Seaworth','Winterfell','Westeros')
,('Theon','Greyjoy','Mereen','Essos')
,('Tyrion','Lannister','Mereen','Essos')
,('Petyr','Baelish','Winterfell','Westeros')
使用设置为变量的搜索条件进行查询.该案例将检查我们有多少个匹配项并按该字段排序.
DECLARE @Variable1 varchar(20); SET @Variable1 = 'Jon'
DECLARE @Variable2 varchar(20); SET @Variable2 = 'Snow'
DECLARE @Variable3 varchar(20); SET @Variable3 = 'Winterfell'
DECLARE @Variable4 varchar(20); SET @Variable4 = 'Westeros'
SELECT
FirstName
,LastName
,City
,State
,CASE WHEN FirstName = @Variable1 THEN 1 ELSE 0 END +
CASE WHEN LastName = @Variable2 THEN 1 ELSE 0 END +
CASE WHEN City = @Variable3 THEN 1 ELSE 0 END +
CASE WHEN State = @Variable4 THEN 1 ELSE 0 END Matches
FROM #TestData
ORDER BY (
CASE WHEN FirstName = @Variable1 THEN 1 ELSE 0 END +
CASE WHEN LastName = @Variable2 THEN 1 ELSE 0 END +
CASE WHEN City = @Variable3 THEN 1 ELSE 0 END +
CASE WHEN State = @Variable4 THEN 1 ELSE 0 END
) DESC
结果为:
FirstName LastName City State Matches
Jon Snow Winterfell Westeros 4
Davos Seaworth Winterfell Westeros 2
Petyr Baelish Winterfell Westeros 2
Jaime Lannister Riverrun Westeros 1
Margaery Tyrell Kings Landing Westeros 1
Cersei Lannister Kings Landing Westeros 1
Daenerys Targaryen Mereen Essos 0
Theon Greyjoy Mereen Essos 0
Tyrion Lannister Mereen Essos 0
内容总结
以上是互联网集市为您收集整理的mysql-根据where子句中匹配列的优先级从db选择数据全部内容,希望文章能够帮你解决mysql-根据where子句中匹配列的优先级从db选择数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。