Tsql 查询以查找提供所有服务的所有提供商

Tsql 查询以查找提供所有服务的所有提供商,tsql,Tsql,假设我们有一个provider\u服务表,它存储了提供者提供的所有服务 Provider_服务表:ProviderID | ServiceId 然后我们有一个带有服务列表的表值参数@idServices 我需要对SQLSERVER进行查询,以查找提供表值参数中指定的所有服务的所有提供者。假设我理解您的问题,并且假设TVP中的字段是ServiceId,则这只是两者之间的内部联接 SELECT ps.* FROM Provider_Service ps INNER JOIN @idServices

假设我们有一个provider\u服务表,它存储了提供者提供的所有服务

Provider_服务表:ProviderID | ServiceId

然后我们有一个带有服务列表的表值参数@idServices


我需要对SQLSERVER进行查询,以查找提供表值参数中指定的所有服务的所有提供者。

假设我理解您的问题,并且假设TVP中的字段是ServiceId,则这只是两者之间的内部联接

SELECT ps.* 
FROM Provider_Service ps
INNER JOIN @idServices s ON s.ServiceId = ps.ServiceId
SELECT
    *
FROM
    Provider_Service PS
    INNER JOIN
        @idServices IS
        ON IS.ServiceId = PS.ServiceId

一种解决方案是双重否定:不存在服务的所有提供者都不由该提供者提供服务。在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
               )
        )

谢谢,这就是我要找的。(在我的例子中,我不需要DISTINCT,因为ProviderID,ServiceID是一个唯一的键)@sil具有的
保证表值参数中的所有服务都在主表中找到。
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
               )
        )