使用sql

时间:2016-05-27 12:03:49

标签: sql database

我有一个包含用户数据的表。它看起来像这样:

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如何知道最后使用哪个列,以便根据相关性返回列表。

1 个答案:

答案 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