2010-10-01 64 views

回答

3

當然,這被稱爲派生表

如:

select a.column, b.column 
from 
    table1 a 
join (select statement) b 
    on b.column = a.column 

記住,它會運行完整地爲派生表選擇,所以如果你只選擇你需要的東西,它會很有幫助。

編輯:我發現我很少需要使用這種技術,除非我加入一些聚合查詢....所以我會仔細考慮你的設計在這裏。例如,迄今爲止,該線程中的大多數演示都不需要使用派生表。

+0

派生表是偉大的是通常比相關子查詢更快。 YOu也可以用staements來代替,但坦率地說,我發現它們很難閱讀和解釋(當然,我已經閱讀了派生表十年)。有一點要記住,任何派生的tblae必須是給定的別名,否則查詢將無法工作。 – HLGEM 2010-10-01 21:40:41

+0

我是從相對較大的數據集的背景來講的(儘管我當然可能是錯的!)。假設我想在日期範圍內加入總和。派生表在被分配給其別名之前被查詢。所以它應該更快地說JOIN(從表中選擇sum(a),b從其中b = c group by b)d比它將做JOIN(從表中選擇sum(a),b by b)d WHERE db = c – Matthew 2010-10-04 16:59:12

1

它取決於其他語句是什麼,但您可以使用的一種技術是公用表表達式 - 這可能不適用於您的特定SQL平臺。

對於SQL Server,如果其他語句是存儲過程,則可能必須將結果插入到臨時表中並加入到該表中。

在SQL Server(以及其他一些平臺)中也可以使用可以像視圖或表一樣連接的表值函數。

1
select * 
    from TableA a 
     inner join (select x from TableB) b 
      on a.x = b.x 
0

它是。但是你想要做什麼?

這可以通過子選擇,視圖或臨時表來完成...更多信息將幫助我們更好地回答這個問題,包括哪些SQL軟件,以及您想要做什麼的示例。

+0

不應該在派生的tble上使用子查詢(如果它們大多數是相關的),也就是要求性能問題,因爲子查詢將逐行操作,並且派生表對集合進行操作。視圖對派生表不提供性能改進。 – HLGEM 2010-10-01 21:42:42

1
Select c.CustomerCode, c.CustomerName, sq.AccountBalance 

From Customers c 
Join (

Select CustomerCode, AccountBalance 
From Balances 
)sq on c.CustomerCode = sq.CustomerCode 
1

當然,作爲一個例子:

SELECT * 
FROM Employees E 
INNER JOIN 
( 
    SELECT EmployeeID, COUNT(EmployeeID) as ComplaintCount 
    FROM Complaints 
    GROUP BY EmployeeID 
) C ON E.EmployeeID = C.EmployeeID 
WHERE C.ComplaintCount > 3 
0

試試這個:

SELECT T1.col1, t2.col2 FROM Table1 t1 INNER JOIN 
(SELECT col1, col2, col3 FROM Table 2) t2 ON t1.col1 = t2.col1