SQL Server - все возвращаемые значения строк существуют в наборе - PullRequest
0 голосов
/ 25 января 2019

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

Пока все выглядит примерно так:

DECLARE
  @MachId1 = 1,
  @MachId2 = 2,
  @MachId3 = 3

SELECT DISTINCT pr.Machine from POs as rpo, Records as pr WHERE BoxId = @StoredProcParam and pr.PONO = rpo.poNo

-- I need to see if all the rows returned from the select query exist as a subset of {1, 2, 3}

Пока не совсем уверен, как это сделать.Я смотрю на использование EXISTS, но не знаю, как определить набор {1,2,3}.Может быть, как таблица, но как это повлияет на производительность хранимого процесса?

SQL Server 2008

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Вы можете использовать EXCEPT, чтобы установить минус значения из результата.Если это приводит к пустому набору, результат должен быть (возможно, пустым) подмножеством значений.Если нет, то оставшийся элемент не является членом набора значений.Для проверки пустого набора вы можете использовать NOT EXISTS.

IF NOT EXISTS (SELECT DISTINCT
                      pr.machine
                      FROM pos rpo
                           INNER JOIN records pr
                                      ON pr.pono = rpo.pono
                      WHERE boxid = @storedprocparam
               EXCEPT
               SELECT machid
                      FROM (SELECT @MachId1 machid
                            UNION
                            SELECT @MachId2 machid
                            UNION
                            SELECT @MachId3 machid) x)
BEGIN
  PRINT 'Yes';
END
ELSE
BEGIN
  PRINT 'No';
END;
0 голосов
/ 25 января 2019

Вы можете использовать предложение WHERE IN.

SELECT DISTINCT pr.Machine from POs as rpo, Records as pr WHERE BoxId in (1,2,3) and pr.PONO = rpo.poNo

Эти значения также могут быть получены из другой таблицы.

SELECT firstname FROM person where id in (select person_id from company where name = ‘Google’)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...