2013-08-21 148 views
0

我有以下SQL SELECT語句: -Where條件和子查詢

SELECT A.RowNo, A.Name, A.Address 
FROM (SELECT ROW_NUMBER() OVER(Order by Table1.ID) 
As RowNo, Table1.Name, Table1.Address From Table1) A 
WHERE RowNo Between 1 And 10 

當我將執行上面的語句,然後哪一個會先執行子查詢或主查詢?

請建議我

感謝

+0

'SELECT ROW_NUMBER()OVER(按Table1.ID排序) As RowNo,Table1.Name,Table1.Address' Executes First。爲什麼有這樣的疑問? –

+0

每次子查詢執行第一次 – speeday125

+0

@Arun P Johny爲什麼asp.net和c#標籤stille在那裏? –

回答

0

你的子查詢將執行第一

SELECT ROW_NUMBER() OVER(Order by Table1.ID) As RowNo, Table1.Name, Table1.Address From Table1 

上述查詢是內聯視圖,它從Table1與一些額外的列具有數據和該視圖可以被稱爲A的一個例子。

所以,你最終的查詢變得

SELECT A.RowNo, A.Name, A.Address FROM A WHERE RowNo Between 1 And 10 

其中A有列RowNoNameAddress

0

你的問題是有點誤導。你假設需要執行2個查詢。在這種情況下,常識會告訴你內部查詢必須在外部查詢之前執行。然而,任何體面的查詢優化器(你沒有指定你正在使用的產品和版本)應該能夠推斷出這實際上是一個單一的查詢,而且它只是SQL語言的愚蠢限制,不允許你寫:

SELECT ROW_NUMBER() OVER(Order by Table1.ID) As RowNo, Table1.Name, Table1.Address From Table1 WHERE RowNo Between 1 And 10 

隨意表達你對ANSI的挫折(設置SQL標準)。如果確實使用的優化器必須執行2次單獨的傳遞,即將內部查詢物化爲臨時表,然後再執行臨時表的另一次掃描以執行過濾,請向您的供應商發送一封憤怒的電子郵件,或者只是獲取其他產品。 :)