在 Select 查询中对另一个 Select 查询的结果使用 Like 运算符

Use Like operator in Select query with results from another Select query

我有一个内连接查询 returns 4-5 行 - 查询:

select Table1.valstring Prefix
from TestDB.dbo.SomeCompany PC
    INNER JOIN TestDB.dbo.CMCompany CMC ON PC.companyuid = CMC.companyuid
    LEFT OUTER JOIN TestDB.dbo.ATRIBUTE Table1 ON Table1.Contract = CMC.contract AND Table1.attribute = 'SomeThing'
    LEFT OUTER JOIN TestDB.dbo.ATRIBUTE TheRealPrefix ON TheRealPrefix.Contract = CMC.contract AND TheRealPrefix.attribute = 'SomeOtherPrefix'
where secretCode = 'Mistery'

我想将此查询提供给另一个 select 查询,该查询将 like 运算符与已描述查询的结果一起使用。

所以像这样:

    select from taskTable where task like ('%' + select Table1.valstring Prefix
    from TestDB.dbo.SomeCompany PC
        INNER JOIN TestDB.dbo.CMCompany CMC ON PC.companyuid = CMC.companyuid
        LEFT OUTER JOIN TestDB.dbo.ATRIBUTE Table1 ON Table1.Contract = CMC.contract AND Table1.attribute = 'SomeThing'
        LEFT OUTER JOIN TestDB.dbo.ATRIBUTE TheRealPrefix ON TheRealPrefix.Contract = CMC.contract AND TheRealPrefix.attribute = 'SomeOtherPrefix'
    where secretCode = 'Mistery'
)

尝试使用这个查询:

select *
from TestDB.dbo.SomeCompany PC
    INNER JOIN TestDB.dbo.CMCompany CMC ON PC.companyuid = CMC.companyuid
    LEFT JOIN TestDB.dbo.ATRIBUTE Table1 ON Table1.Contract = CMC.contract AND Table1.attribute = 'SomeThing'
    LEFT JOIN TestDB.dbo.ATRIBUTE TheRealPrefix ON TheRealPrefix.Contract = CMC.contract AND TheRealPrefix.attribute = 'SomeOtherPrefix'
    LEFT JOIN taskTable ON taskTable.task LIKE '%' + Table1.valstring
 where secretCode = 'Mistery'

但请记住,如果您的数据库中有很多行,按 '%' + Table1.valstring 搜索是不好的做法。

如果您需要匹配,则不需要 left joins。所以删除它们。不清楚 secretCode 从何而来;那应该是明确的。

attribute 上的最后一个 join 没用 -- 不用于过滤。并且 secretCode 不是来自那个 table (你会得到一个错误,因为引用不合格)。

所以,我认为这符合您的要求:

SELECT tt.*
FROM TestDB.dbo.SomeCompany PC JOIN
     TestDB.dbo.CMCompany CMC 
     ON PC.companyuid = CMC.companyuid JOIN
     TestDB.dbo.ATRIBUTE a
     ON a.Contract = CMC.contract AND a.attribute = 'SomeThing' JOIN
     taskTable tt
     ON task like CONCAT('%', a.valstring)
WHERE secretCode = 'Mistery'