Sql 需要使用“like”在多个列中选择返回的记录

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

我对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 [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也将查找所有其他拼写,类似地,使用这些备选方案中的任何一个进行搜索也会搜索备选方案。