Sql 需要使用“like”在多个列中选择返回的记录
我对T-SQL没什么意见,但我在这里努力寻找问题的解决方案 我有一个查找表,根据搜索条件可以有一个或多个结果。 e、 g.在这种情况下,Wimpole是搜索值:Sql 需要使用“like”在多个列中选择返回的记录,sql,sql-server,Sql,Sql Server,我对T-SQL没什么意见,但我在这里努力寻找问题的解决方案 我有一个查找表,根据搜索条件可以有一个或多个结果。 e、 g.在这种情况下,Wimpole是搜索值: select Location from L_Locations where L_Locations.LocationID in ( select LocationID from [B_LocationsToMany where [B_LocationsToMany].NormalizedLocationID in
select Location from L_Locations
where L_Locations.LocationID in
(
select LocationID from [B_LocationsToMany
where [B_LocationsToMany].NormalizedLocationID in
(
select [B_LocationsToMany].NormalizedLocationID
from [B_LocationsToMany] join L_Locations on [B_LocationsToMany].LocationID = L_Locations.LocationID
where L_Locations.Location like '%Wimpole%'
)
这将返回如下列表:
Wimpole
Wimpole Farm
Wimpole Hall
Wimpole Hole Fm
Wimpole land
Wimpole Lodge
Wratworth & Wimpole
我需要搜索另一个表中的多个字段,并返回其中任何字段包含上述任何值的结果。每个字段的运算符必须为“LIKE”类型,因为每个字段可以包含0到2000个字符,即大量单词
请提供一个起点
好的,多亏了萨姆对他的建议做了一点调整,我的建议才奏效
Select *
from CommonDocumentData
where Location in
(
SELECT cdd.Location FROM L_Locations AS cdd
JOIN
(
select Location from L_Locations
where L_Locations.LocationID in
(
select LocationID from [B_LocationsToMany]
where [B_LocationsToMany].NormalizedLocationID in
(
select [B_LocationsToMany].NormalizedLocationID
from [B_LocationsToMany] join L_Locations on [B_LocationsToMany].LocationID = L_Locations.LocationID
where L_Locations.Location like '%Wimpole%'
)
)) as SearchResults
ON CommonDocumentData.Description LIKE '%' + SearchResults.location + '%'
)
您的查询应该是这样的
Select *
from secondtable
where ID in (SELECT ID
FROM secondtable
JOIN (select Location from L_Locations
where L_Locations.LocationID in
(
select LocationID from [B_LocationsToMany
where [B_LocationsToMany].NormalizedLocationID in
(
select [B_LocationsToMany].NormalizedLocationID
from [B_LocationsToMany] join L_Locations on [B_LocationsToMany].LocationID = L_Locations.LocationID
where L_Locations.Location like '%Wimpole%'
)
) as SearchResults
ON secondtable.location LIKE '% ' + SearchResults.location + ' %'
)
像这样的
SELECT
*
FROM
(SELECT
b.LocationID, b.NormalizedLocationID, Location
FROM
B_LocationsToMany b INNER JOIN
L_Locations l ON
b.LocationID = l.LocationID INNER JOIN
L_Locations s ON
l.locationid = s.locationid
WHERE
L.Location LIKE '%Wimpole%') l INNER JOIN
TABLE t ON
l.? = t.?
WHERE
t.col1 = Location OR
t.col2 = Location ...
看起来必须是动态SQL?这多个字段是固定的吗?如果您在任何地方都使用LIKE,我也不确定是否看到使用查找表的好处。你能不能只使用where,比如“%Wimpole%”?这可以通过一个查询完成,但它将是巨大的。我必须使用查找表,因为历史记录中有许多Wimpole的拼写,它与桥接表一起用于规范名称,因此搜索Wimpole也将查找所有其他拼写,类似地,使用这些备选方案中的任何一个进行搜索也会搜索备选方案。