繁体   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