2014-03-12 47 views
-1

我嘗試運行此查詢,它需要很長一段時間因爲參加我使用加入所選列於表

SELECT T1.Id,T2.T2Id,T2.Col2 
FROM Table1 T1 
    LEFT OUTER JOIN (SELECT TOP 1 Id, TT.T2Id,TT.Col2 
        FROM Table2 TT 
        WHERE TT.TypeId=3 
        ORDER BY TT.OrderId 
        )AS T2 ON T2 .Id=T1.Id 

的事情是它不會讓我在參加這樣做TT.Id=T1.Id與查詢。

有沒有其他辦法可以做到這一點?

+0

爲什麼它不會讓你做一些像TT.Id = T1.Id,這是什麼意思 –

+0

是否有理由讓你使用TOP 1?你只是想加入表格? – fnightangel

+0

@Fnightangel:是的,只需要基於類型3的頂部1 –

回答

2

outer apply試試:

SELECT T1.Id, T2.T2Id, T2.Col2 
FROM Table1 T1 
OUTER APPLY (SELECT TOP 1 T2Id, T2.Col2 
      FROM Table2 TT 
      WHERE TT.TypeId = 3 AND TT.Id = T1.Id) T2 
+0

'左外部連接'可能需要'外部應用' – Milen

+0

@MilenPavlov是 – slavoo

+0

輝煌!我從未在 –

0

那麼首先你所有的派生表會產生不確定性的結果,作爲最富有的1行返回每次運行時間可能有所不同,但即使在數據表格保持不變。您可以在派生表中放置一個order by子句來防止這種情況發生。

Table1.id上有索引嗎?你究竟想要達到什麼目的,是從Table1返回所有行,並且Table2中只有一行具有相同ID的行?

如果是這樣,我會考慮使用交叉應用。或者在這種情況下,外部應用。如果我稍後有機會,我會根據需要寫一個例子,但同時只是Google Outer申請SQL Server。

1
SELECT T1.Id, T2.T2Id, T2.Col2 
FROM Table1 T1 
OUTER APPLY (SELECT TOP 1 T2Id, T2.Col2 
      FROM Table2 TT 
      WHERE TT.TypeId = 3 AND T1.Id = TT.Id 
      Order by T2id desc) T2 

我會用在Outer ApplyT1.Id = TT.Id那裏條件,因爲T1是父表加上增加的訂單 - 如果需要有序的結果集