Join 如何使用另一个表的值进行相似搜索?

Join 如何使用另一个表的值进行相似搜索?,join,sql-server-2012,Join,Sql Server 2012,我想在两个表上做一个类似的搜索。一个表有一列搜索词,另一个表有一列执行类似搜索。以下是表格: create table #TableA ( UserName Varchar(50) ) create table #TableB ( Department Varchar(50), Keyword Varchar(50) ) Insert Into #TableA VALUES('bob_sales') Insert Into #TableA VALUES('mary_ac

我想在两个表上做一个类似的搜索。一个表有一列搜索词,另一个表有一列执行类似搜索。以下是表格:

create table #TableA
(
    UserName Varchar(50)
)
create table #TableB
(
    Department Varchar(50),
    Keyword Varchar(50)
)
Insert Into #TableA VALUES('bob_sales') 
Insert Into #TableA VALUES('mary_accounting')
Insert Into #TableA VALUES('sammi_accountant')
Insert Into #TableA VALUES('fred_bestSellerEver123')

Insert Into #TableB VALUES('Accounting', 'accounting') 
Insert Into #TableB VALUES('Accounting', 'accountant')
Insert Into #TableB VALUES('Sales', 'sales')
Insert Into #TableB VALUES('Sales', 'seller')
我想运行一个使用like%关键字%的查询,并提供:

bob_sales              | Sales
mary_accounting        | Accounting
sammi_accountant       | Accounting
fred_bestSellerEver123 | Sales
备注:

如果您的数据可以包含以下内容:sammi_accountary_accounting,您应该添加DISTINCT to SELECT语句以避免重复


对于bob\u sales\u accounting,bob将出现两次,因为它属于两个组。

另一种方法,没有加入,只是为了好玩:

select department, 
(select top 1 username from #tablea a 
where a.username like '%' + b.keyword + '%') UserName
from #tableb b

这是一种数据清理吗?它是为了能够根据与单个部门相关的关键字术语对大量数据进行分类。我不知道你能加入吗?我总是假设必须对相同数据的两列进行连接。很酷,谢谢。当我在数据库中对LIKE%%的所有其他使用都不区分大小写时,你知道为什么这看起来是区分大小写的吗?因为可能是临时表?区分大小写取决于使用的排序规则,您的临时数据库可以与您使用的数据库不同,您可以添加排序规则。。。案例_insensitve@FujiBob选中此选项,从sys.databases中选择名称、排序规则\名称,并将tempdb与您的数据库进行比较。使用不区分大小写的排序规则,它适用于您的数据库language@FujiBob伟大的很高兴我能帮上忙:@FujiBob以防万一,你可以添加DISTINCT或GROUP BY,如果有sammi_accounter_会计记录可以多次匹配请记住,select中的子查询可以返回多个行,并且所有结果都会失败。现在使用TOP 1,你将获得随机的行结果,如:bob_sales_accounting非常正确,增加了前1名来解决这个问题。很好的建议。也许,理想情况下,我们不会使用“like”来连接生产表。现在添加一个带有键的引用表来进行更传统的连接可能还不算太晚。
select department, 
(select top 1 username from #tablea a 
where a.username like '%' + b.keyword + '%') UserName
from #tableb b