sql – 如何从两个查询的并集中选择最上面的n,其中生成的顺序需
发布时间:2020-12-12 08:55:45 所属栏目:MsSql教程 来源:网络整理
导读:假设我有一个用户名的表: Id | Name-----------1 | Bobby20 | Bob90 | Bob100 | Joe-Bob630 | Bobberino820 | Bob Junior 我想要返回名为“Bob”的n个匹配的列表,其中最终的集合首先包含完全匹配,然后是类似的匹配. 我以为这样的事情可能会起作用 SELECT TOP
假设我有一个用户名的表:
Id | Name ----------- 1 | Bobby 20 | Bob 90 | Bob 100 | Joe-Bob 630 | Bobberino 820 | Bob Junior 我想要返回名为“Bob”的n个匹配的列表,其中最终的集合首先包含完全匹配,然后是类似的匹配. 我以为这样的事情可能会起作用 SELECT TOP 4 a.* FROM ( SELECT * from Usernames WHERE Name = 'Bob' UNION SELECT * from Usernames WHERE Name LIKE '%Bob%' ) AS a 但有两个问题: >这是一个无效的查询,因为子选择可以返回许多行(看执行计划显示在顶部之前发生的连接) 我正在寻找将返回的查询(对于TOP 4) Id | Name --------- 20 | Bob 90 | Bob (and then 2 results from the LIKE query,e.g. 1 Bobby and 100 Joe-Bob) 这是否可能在单个查询中? 解决方法您可以使用案例将准确的匹配项放在顶部:select top 4 * from Usernames where Name like '%Bob%' order by case when Name = 'Bob' then 1 else 2 end 或者,如果您担心性能并且有一个索引(名称): select top 4 * from ( select 1 as SortOrder,* from Usernames where Name = 'Bob' union all select 2,* from Usernames where Name like '%Bob%' and Name <> 'Bob' and 4 > ( select count(*) from Usernames where Name = 'Bob' ) ) as SubqueryAlias order by SortOrder (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |