簡體   English   中英

如何比較SQL中兩個表中的數據?

[英]How to compare data from two tables in sql?

我有這樣的表:

  • 表格名稱:注冊日期

在此處輸入圖片說明

我想在last_update的列上獲得最大值,所以我使用以下查詢:

SELECT idtemp, max(last_update) FROM `registrationdate`

那么結果將是這樣的:

在此處輸入圖片說明

我有這樣的表:

  • 表格名稱: temp

在此處輸入圖片說明

然后我想比較registrationdate's table max(last_update)temp's table generatedtime

這是模式:

在此處輸入圖片說明

我該怎么做才能得到這樣的桌子? 提前致謝。

Fyi, registrationdate's table idtemp = temp's table id

請嘗試以下...

SELECT ID AS ID,
       generatedTime AS generatedTime,
       tempTable AS tempTable,
       CASE
           WHEN generatedTime < maxLastUpdate THEN
               'not'
           ELSE
               'update'
       END AS UPDATEorNot
FROM temp
JOIN ( SELECT idtemp AS idtemp,
              MAX( last_update ) AS maxLastUpdate
       FROM registrationdate
       GROUP BY idtemp
     ) AS maxLastUpdateFinder ON temp.ID = maxLastUpdateFinder.idtemp;

假設條件

registrationdate沒有至少一個匹配記錄的temp記錄不需要在輸出中包括。

比較和樣本數據有效,並且樣本輸出的UPDATEorNot字段應讀取為not

說明

該語句以一個子查詢開始,該子查詢查找registrationdateidtemp每個唯一值以及idtemp關聯的last_update最新值。

然后,在temp和子查詢的結果之間執行INNER JOIN ,以便保留temp中的每個記錄,並在registrationdate中至少包含一個對應的記錄,並在其后附加其last_update最新值。

然后,對temp中的字段進行SELECT ,並使用CASE語句確定要為每個記錄的UPDATEorNot字段選擇的值。

請注意,將您提供的比較應用於示例數據時,我的陳述將not返回。 如果要選擇update ,則需要將比較從generatedTime < max( last_update )更改為generatedTime > max( last_update )或更正示例數據。

測試中

我的陳述已針對使用以下腳本創建的示例數據庫進行了測試...

CREATE TABLE registrationdate
(
    last_update   DATETIME,
    idtemp        INT
);
INSERT INTO registrationdate ( last_update,
                               idtemp )
VALUES ( '2017-05-12 14:20:58', 0 ),
       ( '2017-05-12 14:20:58', 0 ),
       ( '2017-05-12 14:20:58', 0 ),
       ( '2017-05-12 14:20:58', 0 ),
       ( '2017-05-12 14:20:58', 0 ),
       ( '2017-05-12 14:20:58', 0 ),
       ( '2017-05-12 14:20:58', 0 ),
       ( '2017-05-12 14:20:58', 0 ),
       ( '2017-05-12 14:20:58', 0 ),
       ( '2017-05-12 14:20:58', 0 ),
       ( '2017-05-12 14:20:58', 0 ),
       ( '2017-05-12 14:20:58', 0 );
CREATE TABLE temp
(
    ID              INT,
    generatedTime   DATETIME,
    tempTable       VARCHAR( 50 )
);
INSERT INTO temp ( ID,
                   generatedTime,
                   tempTable )
VALUES ( 0, '2017-05-01 14:37:00', 'temp_pelamardoktorjk'                ),
       ( 2, '2017-05-01 14:37:00', 'temp_pelamarmagisteripk'             ),
       ( 3, '2017-05-01 14:38:00', 'temp_pelamarmagisterstatusinstitusi' ),
       ( 4, '2017-05-01 14:38:00', 'temp_pelamarmagisterusia'            ),
       ( 5, '2017-05-01 14:38:00', 'temp_pelamarmagisterstatusinstansi'  );

如果您有任何問題或意見,請隨時發表評論。

附錄1

以下是上述聲明的替代形式...

SELECT ID AS ID,
       generatedTime AS generatedTime,
       tempTable AS tempTable,
       CASE
           WHEN generatedTime < MAX( last_update ) THEN
               'not'
           ELSE
               'update'
       END AS UPDATEorNot
FROM temp
JOIN registrationdate ON temp.ID = registrationdate.idtemp
GROUP BY ID,
         generatedTime,
         tempTable;

附錄二

請嘗試以下嘗試重寫的鏈接至代碼...

SELECT 
       generatedTime AS generatedTime,
       tempTable AS tempTable,
       CASE
           WHEN ( ( generatedTime < ( SELECT MAX( last_update ) AS maxPelamarmhsdoktor
                                      FROM pelamarmhsdoktor ) ) OR
                  ( generatedTime < ( SELECT MAX( last_update ) AS maxAkdmstmayor
                                      FROM akdmst_mayor ) ) OR
                  ( generatedTime < ( SELECT MAX( last_update ) AS maxIpbmstdepartemen
                                      FROM ipbmst_departemen ) ) OR
                  ( generatedTime < ( SELECT MAX( last_update ) AS maxIpbmstfakultas
                                      FROM ipbmst_fakultas ) ) OR
                  ( generatedTime < ( SELECT MAX( last_update ) AS maxIpbrefjeniskelamin
                                      FROM ipbref_jeniskelamin ) ) OR
                  ( generatedTime < ( SELECT MAX( last_update ) AS maxJenisinstansi
                                      FROM jenisinstansi ) ) OR
                  ( generatedTime < ( SELECT MAX( last_update ) AS maxJenisinstitusi
                                      FROM jenisinstitusi
                                    ) ) ) THEN
               'Yes'
           ELSE
               'No'
       END AS NeedsToUpdateOrNot
FROM generatedTime;

暫無
暫無

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

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