在 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 join
s。所以删除它们。不清楚 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'
我有一个内连接查询 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 join
s。所以删除它们。不清楚 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'