sql两个表之间的模糊查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql两个表之间的模糊查询相关的知识,希望对你有一定的参考价值。

有两张表
a表:id name b表 name
1 北京 北京市

2 天津 天津市

现在要把要拿到表这样怎么才能关联起来?
我用select * from b left join a on b.name like ’%‘+a.name+'%'查不出来。。有没有别的办法啊?

参考技术A select *
from a t1 left join b t2 on t1.name=left(t2.name,charindex('市',t2.name)-1)

参考技术B select * from a left join b on a.name=SUBSTRING(b.name,0,3) 参考技术C 写法没问题,怎么查不出来?是a表都显示null还是有些显示null有些正常显示了?追问

是a的表全都显示为null

追答

那可能是a表或者b表的name中有空白字符吧,你把ab表的name粘贴复制在一堆字符中间,看看有没有空白(空格及一些显示为空格的符号)

本回答被提问者采纳
参考技术D 这2个表 创建的一点都不科学 基本上没有关系

SQL查询 - 两个表之间的匹配数据

【中文标题】SQL查询 - 两个表之间的匹配数据【英文标题】:SQL query - matching data between two tables 【发布时间】:2016-08-22 12:42:44 【问题描述】:

我有 2 张桌子,即;

在 TableA 中大约有 1000 万行, 在 TableB 中大约有 500k 行

TableA (10million rows)
Url
-------------------------------------------
http://www.example.com/data/tuesday-morning
http://www.example.com/data/wednesday-evening



TableB (500k rows)
Keyword          Value
---------       ----------
Sunday              0
Monday              0
Tuesday             0
Wednesday           0

我想在TableA中搜索TableB中的所有关键字,并找到匹配项,将它们的Value更新为1

我使用 MERGE,但问题是搜索至少需要 10 个小时。

我会每天进行搜索,因为 TableB 中的关键字每天都会更新

MERGE INTO TableB As TB 
USING (Select Url From TableA) As TA 
ON TA.Url LIKE 'http://www.example.com/data/'+TB.Keyword+'-%' 
WHEN MATCHED THEN 
UPDATE SET TB.Value=1;

在这两个表之间进行最快查找的最佳 SQL 查询是什么?

非常感谢

【问题讨论】:

摆脱(Select Url From TableA) ,这肯定会减慢您的查询速度,只使用TableA 使用这一行金额的唯一方法 - 使用全文索引。也就是说 - 采用 tinka (***.com/a/39080778/2746150) 下面提出的方法,但您必须将 like '%'+t2.keyword+'%' 替换为特定于全文索引的语言结构,这样更快。 【参考方案1】:

如果我了解您的 Q 可能这个解决方案会对您有所帮助,您可以通过 ID 或其他方式应用一些 WHERE 子句,这样您就可以纠正您的记录发生的情况,首先应用少量数据,然后您可以应用所有数据。

 -- declare table1
 declare @table1 table
 (url varchar(max))

 insert into @table1
 values
 ('http://www.example.com/data/tuesday-morning'),
 ('http://www.example.com/data/tuesday-morning'),
 ('http://www.example.com/data/noday-morning')


 -- declare table2
 declare @table2 table
 (keyword varchar(33), val int)

 insert into @table2
 values
 ('monday',0),
 ('tuesday',0)

 -- select
 select * from 
 @table1 t1 join
 @table2 t2 on t1.url like '%'+t2.keyword+'%'

 -- update
 update
 @table2 
 set val =1 
 from 
 @table1 t1 join
 @table2 t2 on t1.url like '%'+t2.keyword+'%'

  -- select again
 select * from 
 @table1 t1 join
 @table2 t2 on t1.url like '%'+t2.keyword+'%'

【讨论】:

以上是关于sql两个表之间的模糊查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL:一个表多列模糊查询

SQL中如果进行模糊查询整个表

SQL两表模糊匹配查询

Tableau技巧——模糊查询

求助asp两个字段中模糊查询

SQL 怎么实现模糊查询?