共用方式為


使用比較運算子的子查詢

子查詢可以使用其中一個比較運算子 (=, < >, >, > =, <, ! >, ! <, or < =) 導入。

以未修改的比較運算子 (後面未跟著 ANY 或 ALL 的比較運算子) 導入的子查詢必須傳回單一值,而不是值清單,就像 IN 導入的子查詢一樣。若這類的子查詢傳回一個以上的值,SQL Server 將會顯示一個錯誤訊息。

若要使用未修改的比較運算子提出的子查詢,您必須非常熟悉您的資料和問題的本質,才能瞭解子查詢是否只會傳回一個數值。

例如,如果您假設每個銷售人員只負責一個銷售區域,而您要尋找 Linda Mitchell 所負責的區域之客戶,您可以撰寫一個陳述式加上導入簡單 = 比較運算子的子查詢。

USE AdventureWorks2008R2;
GO
SELECT CustomerID
FROM Sales.Customer
WHERE TerritoryID =
    (SELECT TerritoryID
     FROM Sales.SalesPerson
     WHERE BusinessEntityID = 276)

不過,如果 Linda Mitchell 負責一個以上的銷售區域時,就會產生錯誤訊息。您可使用 IN 形式來取代 = 比較運算子 (= ANY 也可行)。

以未修改的比較運算子提出的子查詢通常會包含彙總函式,因為它們將傳回單一數值。例如,下列陳述式尋找定價大於平均定價的所有產品名稱。

Use AdventureWorks2008R2;
GO
SELECT Name
FROM Production.Product
WHERE ListPrice >
    (SELECT AVG (ListPrice)
     FROM Production.Product)

因為未修改的比較運算子提出的子查詢必須傳回單一值,除非您知道 GROUP BY 或 HAVING 子句本身將傳回單一值,否則它們不能包含 GROUP BY 或 HAVING 子句。例如,下列查詢會尋找子類別 14 中價格高於最低價產品的產品。

Use AdventureWorks2008R2;
GO
SELECT Name
FROM Production.Product
WHERE ListPrice >
    (SELECT MIN (ListPrice)
     FROM Production.Product
     GROUP BY ProductSubcategoryID
     HAVING ProductSubcategoryID = 14)

請參閱

概念