假设我们有一个provider_service表,用于存储提供商提供的所有服务。
Provider_Service表:ProviderID | SERVICEID
然后我们有一个table_valued参数@idServices,带有服务列表。
我需要查询SQLSERVER以查找提供表值参数中指定的所有服务的所有提供程序。
答案 0 :(得分:2)
SELECT ps.ProviderID
FROM Provider_Service ps
INNER JOIN @idServices i
ON ps.ServiceId = i.ServiceId
GROUP BY ps.ProviderID
HAVING COUNT(DISTINCT ps.ServiceId) = (SELECT COUNT(*) FROM @idServices)
答案 1 :(得分:1)
SELECT ps.*
FROM Provider_Service ps
INNER JOIN @idServices s ON s.ServiceId = ps.ServiceId
答案 2 :(得分:0)
假设我理解你的问题并假设TVP中的字段是ServiceId,它只是两者之间的内部联接
SELECT
*
FROM
Provider_Service PS
INNER JOIN
@idServices IS
ON IS.ServiceId = PS.ServiceId
答案 3 :(得分:0)
一种解决方案是双重否定:所有不提供服务的提供商不提供服务。在SQL中:
select distinct ps1.ProviderID
from Provider_Service ps1
where not exists
(
select *
from @idServices is
where not exists
(
select *
from Provider_Service ps2
where ps2.ProviderID = ps1.ProviderID
ps2.ServiceId = is.ServiceID
)
)