我有一个保存用户数据的表。看起来像这样:
ID Name Surname Age
1 Alice Moore 23
2 David Moore 45
如果仅处理一个字段,可以说Name
,我必须将其用作搜索键,那么我可以简单地执行以下操作:
Select * from Users where Name Like '% Al %'
ORDER BY DIFFERENCE(Name , 'Al') desc;
并获取用户1的数据。
如果我也希望搜索操作也考虑到其他字段,可以说Surname
,我不确定如何进行。
怎么order by
知道最后要使用哪一列,这样我才能根据相关性返回列表。
在开始之前,我想先说一下不确定在表中包含大量数据的下面的解决方案的合理性。我认为这只是我想应为您解决的问题。
第一次尝试
您可以做的是difference
按每行中所有感兴趣的列的最小值进行排序。
SELECT FirstName,
LastName,
(SELECT MIN(v)
FROM (VALUES (DIFFERENCE(FirstName , 'Al')),
(DIFFERENCE(LastName , 'Al'))) AS value(v)) as diff
FROM Users WHERE FirstName LIKE 'Al%' OR FirstName LIKE 'Al%'
ORDER BY diff DESC;
在这里尝试交互式小提琴。
第二次尝试
另一种选择是以所有感兴趣的行的串联字符串之差的降序对结果进行排序。
SELECT FirstName,
LastName
FROM Users
WHERE CONCAT (FirstName, LastName) LIKE 'Al%'
ORDER BY
DIFFERENCE(CONCAT (FirstName, LastName) , 'Al') DESC;
在这里尝试交互式小提琴。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句