Aracılığıyla paylaş


(Transact-SQL)

Belirtilen değer bir alt sorgu veya bir listedeki herhangi bir değer eşleşip belirler.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

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

Bağımsız değişkenler

  • test_expression
    Herhangi bir geçerli ifade.

  • subquery
    Bir sütunun sonuç kümesi olan bir alt sorgu ise. Bu sütunda aynı veri türü olarak olmalıdır test_expression.

  • expression[ ,... n ]
    Bir maç için sınamak için ifadeler listesidir. Tüm ifadeler aynı türde olmalıdır test_expression.

Sonuç türleri

Boolean

Sonuç değeri

Eğer değeri test_expressiontarafından döndürülen herhangi bir değere eşit subqueryya da birine eşit olan expressionvirgülle ayrılmış listesi, doğru'yu; sonucu değeridir Aksi takdirde sonuç false değeridir.

not IN kullanarak her subquerydeğeri veya expression.

Dikkat notuDikkat

Herhangi bir döndürülen değerleri null subqueryya expression, karşılaştırılır test_expressionIN kullanarak ya da bilinmeyen dönmek değil. NULL values ın birlikte IN ile veya değil beklenmeyen sonuçlar verebilir.

Açıklamalar

IN yan tümcesi içinde bir çok sayıda değerleri (binlerce) dahil olmak üzere, kaynaklarını tüketir ve Hata 8623 veya 8632 dönün. Bu sorunu çözmek için öğeler listesinde Tablo depolar.

Hata 8623 oluşuyor:

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.

Hata 8632 oluşuyor:

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

Örnekler

A.Karşılaştırma or ve In

Aşağıdaki örnek, tasarım mühendisleri, araç tasarımcıları veya pazarlama yardımcılar çalışanların adları listesini seçer.

USE AdventureWorks2012;
GO
SELECT p.FirstName, p.LastName, e.JobTitle
FROM Person.Person 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

Ancak, In. kullanarak aynı sonuçları almak

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

Sonuç kümesini ya da bir sorgu İşte.

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)

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 ile bir alt sorgu kullanma

Aşağıdaki örnek, satış temsilcileri için tüm kimlikleri bulur. SalesPersonyıl 250.000 $ büyük bir satış kotası var ve sonra seçer Çalışanlar tablosunu Employeetüm çalışanların adlarını tablo nerede EmployeeID, maç sonuçlarından SELECTsorgu.

USE AdventureWorks2012;
GO
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

Sonuç kümesi buradadır.

FirstName   LastName                                           
---------   -------- 
Tsvi         Reiter                                            
Michael      Blythe                                            
Tete         Mensa-Annan                                       

(3 row(s) affected)

FirstName   LastName                                           
---------   -------- 
Tsvi         Reiter                                            
Michael      Blythe                                            
Tete         Mensa-Annan                                       

(3 row(s) affected)

C.not IN ile bir alt sorgu kullanma

Aşağıdaki örnek, bir kota 250.000 $ büyük olmayan satışçılar bulur. NOT INdeğerler listesindeki öğeleri eşleşmiyor satışçılar bulur.

USE AdventureWorks2012
GO
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

Ayrıca bkz.

Başvuru

CASE (Transact-sql)

Ifadeler (Transact-sql)

Yerleşik İşlevler (Transact-SQL)

İşleçler (Transact-sql)

select (Transact-sql)

NEREDE (Transact-sql)

ALL (Transact-sql)

BAZI | Herhangi bir (Transact-sql)