1
A
回答
3
當然,這被稱爲派生表
如:
select a.column, b.column
from
table1 a
join (select statement) b
on b.column = a.column
記住,它會運行完整地爲派生表選擇,所以如果你只選擇你需要的東西,它會很有幫助。
編輯:我發現我很少需要使用這種技術,除非我加入一些聚合查詢....所以我會仔細考慮你的設計在這裏。例如,迄今爲止,該線程中的大多數演示都不需要使用派生表。
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
相關問題
- 1. LinqToSql加入有一張桌子和
- 2. 困難的SQL語句...四張桌子?
- 3. SQL從一張桌子和另一張桌子上的一個桌子加入一切?
- 4. mysql加入2張桌子 - 但必須加入同一張桌子兩次
- 5. 有一張桌子
- 6. linq加入多張桌子
- 7. 並排顯示一張桌子,一個iframe和一張桌子
- 8. 參考一張桌子或另一張桌子的桌子排
- 9. textarea的和一張桌子
- 10. SQL服務器 - 一張桌子和一個地方之間加入查詢
- 11. 多張桌子與同一張桌子有關係
- 12. 我如何加入這5張桌子?
- 13. 加入Laravel 4中的兩張桌子
- 14. 加入三張桌子?錯誤在phpMyAdmin
- 15. 在Yii 2中加入3張桌子
- 16. 如何加入我的兩張桌子?
- 17. 幫助在Zend加入兩張桌子
- 18. SQL,臨時一張桌子只讀
- 19. 加入的SQL子查詢語句
- 20. 熊貓:使用GROUPBY成一張桌子
- 21. 另一張桌子裏面的桌子?
- 22. 插入一張桌子,並使用他們的PK插入第二張桌子作爲FK - SSIS
- 23. 不斷插入和更新。有一張巨大的桌子還是兩張較小的桌子是更好的
- 24. 桌子與第一張桌子頂部並排輸入/搜索
- 25. 左外加在同一張桌子上
- 26. 如何在三張桌子上使用加入
- 27. 如何在select子句中使用from SQL語句加入Postgresql子查詢?
- 28. 一對多加入同一張桌子上的3個級別
- 29. 數據庫結構 - 兩張桌子還是一張桌子?
- 30. 4桌INNER JOIN SQL語句
派生表是偉大的是通常比相關子查詢更快。 YOu也可以用staements來代替,但坦率地說,我發現它們很難閱讀和解釋(當然,我已經閱讀了派生表十年)。有一點要記住,任何派生的tblae必須是給定的別名,否則查詢將無法工作。 – HLGEM 2010-10-01 21:40:41
我是從相對較大的數據集的背景來講的(儘管我當然可能是錯的!)。假設我想在日期範圍內加入總和。派生表在被分配給其別名之前被查詢。所以它應該更快地說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