Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-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)