Megosztás a következőn keresztül:


IN (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Meghatározza, hogy egy megadott érték megfelel-e egy al lekérdezés vagy lista bármely értékének.

Transact-SQL szintaxis konvenciók

Syntax

test_expression [ NOT ] IN   
    ( subquery | expression [ ,...n ]  
    )   

Arguments

test_expression
Bármely érvényes kifejezés.

subquery
Egy olyan alquery, amely egy oszlop eredményhalmazával rendelkezik. Ennek az oszlopnak ugyanazzal az adattípussal kell rendelkeznie, mint test_expression.

kifejezés[ ,... n ]
Egyezést tesztelni kívánt kifejezések listája. Minden kifejezésnek azonos típusúnak kell lennie, mint test_expression.

Eredménytípusok

Boolean

Eredményérték

Ha a test_expression értéke megegyezik az alkérdezés által visszaadott értékkel, vagy egyenlő a vesszővel elválasztott lista bármely kifejezésével , az eredmény értéke IGAZ; ellenkező esetben az eredmény értéke HAMIS.

A NOT IN használata nem tiltja le az al lekérdezési értéket vagy kifejezést.

Caution

Minden olyan null érték, amelyet az alquery vagy kifejezés a test_expression in vagy NOT IN függvény használatával ad vissza, ISMERETLEN. Ha null értékeket használ az IN vagy a NOT IN értékekkel együtt, az váratlan eredményeket eredményezhet.

Remarks

Ha a zárójelek között rendkívül nagy számú értéket (több ezer értéket vesszővel elválasztva) tartalmaz, az IN záradék erőforrásokat használhat fel, és a 8623-at vagy a 8632-es hibát adja vissza. A probléma megoldásához tárolja az elemeket az IN listában egy táblában, és használjon SELECT alqueryt egy IN záradékon belül.

8623-as hiba:

The query processor ran out of internal resources and could not produce a query plan. This is a rare event and only expected for extremely complex queries or queries that reference a very large number of tables or partitions. Please simplify the query. If you believe you have received this message in error, contact Customer Support Services for more information.

8632-es hiba:

Internal error: An expression services limit has been reached. Please look for potentially complex expressions in your query, and try to simplify them.

Examples

A. Or és IN összehasonlítása

Az alábbi példa kiválasztja azoknak az alkalmazottaknak a nevét, akik tervezőmérnökök, eszköztervezők vagy marketingsegédek.

-- Uses AdventureWorks  
  
SELECT p.FirstName, p.LastName, e.JobTitle  
FROM Person.Person AS p  
JOIN HumanResources.Employee AS e  
    ON p.BusinessEntityID = e.BusinessEntityID  
WHERE e.JobTitle = 'Design Engineer'   
   OR e.JobTitle = 'Tool Designer'   
   OR e.JobTitle = 'Marketing Assistant';  
GO  

Az IN használatával azonban ugyanazokat az eredményeket kell lekérni.

-- Uses AdventureWorks  
  
SELECT p.FirstName, p.LastName, e.JobTitle  
FROM Person.Person AS p  
JOIN HumanResources.Employee AS e  
    ON p.BusinessEntityID = e.BusinessEntityID  
WHERE e.JobTitle IN ('Design Engineer', 'Tool Designer', 'Marketing Assistant');  
GO  

Íme az eredményhalmaz bármelyik lekérdezésből.

FirstName   LastName      Title  
---------   ---------   ---------------------  
Sharon      Salavaria   Design Engineer                                     
Gail        Erickson    Design Engineer                                     
Jossef      Goldberg    Design Engineer                                     
Janice      Galvin      Tool Designer                                       
Thierry     D'Hers      Tool Designer                                       
Wanida      Benshoof    Marketing Assistant                                 
Kevin       Brown       Marketing Assistant                                 
Mary        Dempsey     Marketing Assistant                                 
  
(8 row(s) affected)  

B. In használata al lekérdezéssel

Az alábbi példa megkeresi az értékesítő összes azonosítóját a táblában azon SalesPerson alkalmazottak számára, akiknek az értékesítési kvótája meghaladja az évi 250 000 USD-t, majd kiválasztja a Employee táblából az összes alkalmazott nevét, amelyek EmployeeID megfelelnek az SELECT allekérdezés eredményeinek.

-- Uses AdventureWorks  
  
SELECT p.FirstName, p.LastName  
FROM Person.Person AS p  
    JOIN Sales.SalesPerson AS sp  
    ON p.BusinessEntityID = sp.BusinessEntityID  
WHERE p.BusinessEntityID IN  
   (SELECT BusinessEntityID  
   FROM Sales.SalesPerson  
   WHERE SalesQuota > 250000);  
GO  

Itt van az eredmények összessége.

FirstName   LastName                                             
---------   --------   
Tsvi         Reiter                                              
Michael      Blythe                                              
Tete         Mensa-Annan                                         
  
(3 row(s) affected)  

C. A NOT IN használata alqueryvel

Az alábbi példa megkeresi azokat az értékesítőket, akik nem rendelkeznek 250 000 USD-nél nagyobb kvótával. NOT IN megkeresi azokat az értékesítőket, akik nem felelnek meg az értékek listájában szereplő elemeknek.

-- Uses AdventureWorks  
  
SELECT p.FirstName, p.LastName  
FROM Person.Person AS p  
    JOIN Sales.SalesPerson AS sp  
    ON p.BusinessEntityID = sp.BusinessEntityID  
WHERE p.BusinessEntityID NOT IN  
   (SELECT BusinessEntityID  
   FROM Sales.SalesPerson  
   WHERE SalesQuota > 250000);  
GO  

Példák: Azure Synapse Analytics and Analytics Platform System (PDW)

D. Az IN és a NOT IN használata

Az alábbi példa megkeresi a FactInternetSales tábla összes olyan bejegyzését, amely megfelel SalesReasonKey a tábla értékeinek DimSalesReason .

-- Uses AdventureWorks  
  
SELECT * FROM FactInternetSalesReason   
WHERE SalesReasonKey   
IN (SELECT SalesReasonKey FROM DimSalesReason);   

Az alábbi példa megkeresi a FactInternetSalesReason tábla összes olyan bejegyzését, amely nem felel meg SalesReasonKey a tábla értékeinek DimSalesReason .

-- Uses AdventureWorks  
  
SELECT * FROM FactInternetSalesReason   
WHERE SalesReasonKey   
NOT IN (SELECT SalesReasonKey FROM DimSalesReason);  

E. In használata kifejezéslistával

Az alábbi példa megkeresi az értékesítő összes azonosítót a táblában azoknak az DimEmployee alkalmazottaknak, akik utónevük vagy Mikeutónevük vanMichael.

-- Uses AdventureWorks  
  
SELECT FirstName, LastName  
FROM DimEmployee  
WHERE FirstName IN ('Mike', 'Michael');  

Lásd még:

ESET (Transact-SQL)
Kifejezések (Transact-SQL)
Beépített függvények (Transact-SQL)
Operátorok (Transact-SQL)
VÁLASZT (Transact-SQL)
AHOL (Transact-SQL)
ALL (Transact-SQL)
NÉHÁNY | ANY (Transact-SQL)