2017-07-04 182 views
-3

我有兩個表A和B.在不使用子查詢的情況下編寫查詢

它們通過一個名爲id的公共字段連接。表B還有一個字段post_code和一個附加到該post_code的日期,這意味着post_code首次輸入到數據庫中。

我需要選擇最新的郵政編碼並將其連接到表A上的一行,而不需要子查詢。

我有一個子查詢解決方案,但它採取了太久

TIA

+2

份額查詢在這裏,它給更多clearity –

+0

我能想到的唯一提供解決方案的DBMS是帶有'DISTINCT ON'的PostgreSQL。所有其他DBMS需要一個子查詢,可以通過過濾'ROW_NUMBER'結果或使用'MAX(date)'子查詢或應用'CROSS APPLY'或'LATERAL'子查詢。你使用的是什麼DBMS,是什麼讓你認爲你不能使用子查詢? –

+0

我正在使用SQL Server。我在表A中有超過100萬行。在子查詢解決方案中,這意味着每行的子查詢。正如我在我的問題中所說的那樣,時間太長了。 對於服務器較大的人來說,這可能不是問題,但我必須和我坐在我對面的同事一起玩:) – user2573436

回答

0

您可以嘗試使用APPLY

Create Table #A(Id int) 

Create Table #B(Id int, AId int, PostCode VARCHAR(10), DateAdded DATE) 

Insert into #A 
    Values(1),(2) 


Insert into #B 
    Values(1,1,'NW1', GETDATE()-100), 
      (2,1,'S20', GETDATE()-200) 

Select * 
From #A A 
    CROSS APPLY(SELECT TOP 1 B.* 
       FROM #B B 
       WHERE A.Id = B.AId 
       ORDER BY DateAdded DESC) Latest  
+0

不錯,謝謝。我以前沒有遇到過交叉申請。 – user2573436

+0

@ user2573436:這是你之後的事情嗎?你的問題並不清楚 –

+0

我對SQL概念有點朦朧,所以我的問題可能不是最清楚的。我應用了您的解決方案,並提出了我正在尋找的確切答案,歡呼。 – user2573436

相關問題