2012-04-18 53 views
0

我想使用左外連接是這樣的:跳過在SQL Server中的子查詢

SELECT ... 
FROM Table1 
LEFT OUTER JOIN 
(SELECT only e.g. 3rd record... , SomeField FROM Table2) tbl2 
    ON Table1.SomeField = tbl2.SomeField 

我如何能做到這一點,如果我需要子查詢中選擇不只是從表2的第三紀錄,但第3個記錄在具有SomeField = Table1.SomeField的Table2記錄中? 謝謝。

+1

「第3條記錄」是什麼意思?除非您有ORDER BY子句,否則Resuts集合沒有訂單。你的例子雖然沒有。你能否讓你的例子更清楚? – 2012-04-18 12:45:36

+1

您可以請張貼表結構,您嘗試的查詢和**應該**的樣子? – 2012-04-18 12:46:30

+0

真正的任務是將兩個Table1和Table2中的數據移動到Table3中。目標Table3具有Field1,Field2和Field3,並且我需要Field1具有來自Table2.SomeField(第1條記錄)的數據,Field2來自Table2.SomeField(第2條記錄),Field3來自Table2.SomeField(第3條記錄)。所以我試圖用Table2離開外部連接Table1 3次,但選擇不同的記錄:1st,2nd和3rd。 – 2012-04-18 13:17:51

回答

0

如果這是SQL Server 2005或更新,您可以使用row_number()

LEFT JOIN 
(
    select * 
    from 
    (
     select *, 
       row_number() over (order by something) rn 
     from Table2 
     where Table2.Column = Table1.Column 
    ) a 
    where a.rn = 3 
) a 

不幸的是,你需要嵌套它更深一層,因爲你不能在一個條件下直接使用ROW_NUMBER。

編輯:

我的壞 - 我真的沒有注意到連接的一部分。如果要加入衍生表,請使用:

LEFT JOIN 
(
    select *, 
      row_number() over (partition by SomeField order by something) rn 
    from Table2 
) tbl2 
    ON Table1.SomeField = tbl2.SomeField 
AND tbl2.rn = 3 

注意:您需要row_number()中的ORDER BY以保持事物一致。

+0

「你不能在你定義的地方使用row_number」,你可以直接通過row_number命令。 – 2012-04-18 12:49:59

+0

@tim是的,這是非常真實的。我不能在條件下使用它。 – 2012-04-18 12:51:11

+0

謝謝。我已經嘗試過這種解決方案,但出現錯誤:無法綁定多部分標識符「Table1.Column」。 – 2012-04-18 12:59:31