簡體   English   中英

SQL JOIN語句

[英]SQL JOIN Statement

可以說我有一張桌子,例如

Request No. Type  Status  
---------------------------
1           New   Renewed 

然后是另一張桌子

Action ID Request No  LastUpdated    
------------------------------------
1           1         06-10-2010
2           1         07-14-2010
3           1         09-30-2010

如何將第二個表與第一個表連接在一起,但只能從第二個表中獲取最新記錄(例如,上次更新的DESC)

SELECT T1.RequestNo     ,
       T1.Type ,
       T1.Status,
       T2.ActionId      ,
       T2.LastUpdated
FROM   TABLE1 T1
       JOIN TABLE2 T2
       ON     T1.RequestNo = T2.RequestNo
WHERE  NOT EXISTS
       (SELECT *
       FROM    TABLE2 T2B
       WHERE   T2B.RequestNo   = T2.RequestNo
       AND     T2B.LastUpdated > T2.LastUpdated
       )

使用聚合:

SELECT r.*, re.*
  FROM REQUESTS r
  JOIN REQUEST_EVENTS re ON re.request_no = r.request_no
  JOIN (SELECT t.request_no,
               MAX(t.lastupdated) AS latest
          FROM REQUEST_EVENTS t
      GROUP BY t.request_no) x ON x.request_no = re.request_no
                              AND x.latest = re.lastupdated

使用LEFT JOIN&NOT EXISTS:

SELECT r.*, re.*
  FROM REQUESTS r
  JOIN REQUEST_EVENTS re ON re.request_no = r.request_no
 WHERE  NOT EXISTS(SELECT NULL
                     FROM REQUEST_EVENTS re2
                    WHERE re2.request_no = r2.request_no
                      AND re2.LastUpdated > re.LastUpdated)
SELECT *
FROM REQUEST, ACTION
WHERE REQUEST.REQUESTNO = ACTION.REQUESTNO --Joining here
AND ACTION.LastUpdated = (SELECT MAX(LastUpdated) FROM ACTION WHERE REQUEST.REQUESTNO = ACTION.REQUESTNO);

子查詢用於獲取最近更新記錄的日期,並與其自身進行匹配,以防止其他記錄被合並。

當然,根據LastUpdated字段的精確度,它可能會有兩個記錄在同一日期被更新的問題,但這在任何其他實現中都遇到了問題,因此必須提高精度或采用其他邏輯保留在原位或另一個區別特征,以防止返回多行。

SELECT r.RequestNo, r.Type, r.Status, a.ActionID, MAX(a.LastUpdated) 
FROM Request r
INNER JOIN Action a ON r.RequestNo = a.RequestNo
GROUP BY r.RequestNo, r.Type, r.Status, a.ActionID

我們可以將Top 1操作與ORDER BY子句一起使用。 例如,如果您的表是RequestTable(ID,Type,Status)和ActionTable(ActionID,RequestID,LastUpdated),則查詢將如下所示:

Select Top 1 rq.ID, rq.Status, at.ActionID
From RequestTable as rq
JOIN ActionTable  as at ON rq.ID = at.RequestID
Order by at.LastUpdated DESC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM