Chciałbym móc łatwo sprawdzić, które unikalne identyfikatory nie istnieją w tabeli, z tych dostarczonych w zapytaniu.
Aby lepiej to wyjaśnić, oto, co zrobiłbym teraz, aby sprawdzić, które identyfikatory z listy „1, 2, 3, 4” nie istnieją w tabeli:
SELECT * FROM dbo."TABLE" WHERE "ID" IN ('1','2','3','4')
, powiedzmy, że tabela nie zawiera wiersza o identyfikatorze 2.- Zrzuć wyniki do Excela
- Uruchom WYSZUKAJ.PIONOWO na oryginalnej liście, która wyszukuje każdą wartość listy na liście wyników.
- Każda WYSZUKAJ.PIONOWO, której wynikiem
#N/A
jest an, dotyczy wartości, która nie wystąpiła w tabeli.
Myślę, że musi być lepszy sposób na zrobienie tego. Idealnie szukam czegoś takiego
Lista do sprawdzenia -> Zapytanie do tabeli do sprawdzenia -> Członkowie listy nieobecni w tabeli
sql-server
sql-server-2005
except
NReilingh
źródło
źródło
Odpowiedzi:
Użyj
EXCEPT
:Zobacz SqlFiddle .
values
Konstruktor będzie działać tylko na SQL Server 2008 lub nowszym. Do 2005 r. Użyjjak szczegółowo opisano w tej odpowiedzi SO .
źródło
Incorrect syntax near the keyword 'values'.
podczas bieganiaSELECT * FROM (values ('search string'),('other string')) as T(ID)
Zbudowałbym tabelę zmiennych lub tabelę tymczasową zawierającą identyfikatory, których szukasz ... następnie użyj rozwiązania Remusa, pomniejszonego o cukier syntaktyczny z 2008 roku:
źródło
Jestem teraz kilka lat mądrzejszy (i mam nowszy SQL Server) niż kiedy zadałem to pytanie, więc aby uczcić odznakę Znane Pytanie, które dostałem za to pytanie, oto co bym teraz zrobił. (Nie sądzę, żeby kiedykolwiek korzystałem z tego
EXCEPT
operatora.)Powiedziałbym, że
LEFT JOIN
poniższa metoda jest bardziej przydatna niż,EXCEPT
ponieważ można ją skomponować z innymi połączeniami bez potrzeby posiadania CTE.źródło