2011-12-22 78 views
2

假設我們有一個provider_service表,用於存儲提供商提供的所有服務。查詢查找所有提供所有服務的提供商

Provider_Service表:ProviderID | ServiceId

然後我們有一個table_valued參數@idServices與服務列表。

我需要查詢SQLSERVER才能找到提供表值參數中指定的所有服務的所有提供程序。

回答

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) 
+0

謝謝,這就是我一直在尋找的。 (在我的情況下,我不需要DISTINCT,因爲ProviderID,ServiceID是唯一鍵) – Alfz

+0

爲什麼我們需要'HAVING ...'這裏?不能得到這一點 – sll

+0

@sil'HAVING'保證*表值參數中的所有*服務都可以在主表中找到。 –

1
SELECT ps.* 
FROM Provider_Service ps 
INNER JOIN @idServices s ON s.ServiceId = ps.ServiceId 
0

假設我理解你的問題,並假設在TVP領域是SERVICEID,它只是兩個

SELECT 
    * 
FROM 
    Provider_Service PS 
    INNER JOIN 
     @idServices IS 
     ON IS.ServiceId = PS.ServiceId 
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 
       ) 
     )