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+'%'查不出来。。有没有别的办法啊?
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两个表之间的模糊查询的主要内容,如果未能解决你的问题,请参考以下文章