我有一个包含用户数据的表。它看起来像这样:
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
如何知道最后使用哪个列,以便根据相关性返回列表。
答案 0 :(得分:1)
在此之前,我想说我不确定在具有大量数据的表格中遵循我的解决方案是多么可取。我认为这应该适用于你的案件。
首先尝试
您可以做的是按每行感兴趣的所有列的最小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;
尝试互动小提琴here。
第二次尝试
另一种选择是按照所有感兴趣行的连接字符串差异的降序排序结果。
SELECT FirstName,
LastName
FROM Users
WHERE CONCAT (FirstName, LastName) LIKE 'Al%'
ORDER BY
DIFFERENCE(CONCAT (FirstName, LastName) , 'Al') DESC;
尝试互动小提琴here。