Запрос, чтобы найти всех поставщиков, которые предлагают все услуги - PullRequest
2 голосов
/ 22 декабря 2011

Допустим, у нас есть таблица provider_service, в которой хранятся все услуги, предлагаемые поставщиками.

Таблица Provider_Service: ProviderID |ServiceId

Затем у нас есть параметр table_valued @idServices со списком служб.

Мне нужен запрос для SQLSERVER, чтобы найти всех поставщиков, которые предлагают все службы, указанные в параметре табличного значения.

Ответы [ 4 ]

2 голосов
/ 22 декабря 2011
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 голос
/ 22 декабря 2011
SELECT ps.* 
FROM Provider_Service ps
INNER JOIN @idServices s ON s.ServiceId = ps.ServiceId
0 голосов
/ 22 декабря 2011

Одним из решений является двойное отрицание: все провайдеры, для которых не существует услуг, не обслуживаются этим провайдером. В 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
               )
        )
0 голосов
/ 22 декабря 2011

Предполагая, что я понимаю ваш вопрос и предполагая, что поле в TVP является ServiceId, это просто внутреннее соединение между двумя

SELECT
    *
FROM
    Provider_Service PS
    INNER JOIN
        @idServices IS
        ON IS.ServiceId = PS.ServiceId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...