查询以查找提供所有服务的所有提供程序

时间:2011-12-22 16:08:09

标签: tsql

假设我们有一个provider_service表,用于存储提供商提供的所有服务。

Provider_Service表:ProviderID | SERVICEID

然后我们有一个table_valued参数@idServices,带有服务列表。

我需要查询SQLSERVER以查找提供表值参数中指定的所有服务的所有提供程序。

4 个答案:

答案 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
               )
        )