比较 2 个表并返回 MySQL 中的变化

Posted

技术标签:

【中文标题】比较 2 个表并返回 MySQL 中的变化【英文标题】:Compare 2 tables and return the variations in MySQL 【发布时间】:2020-04-16 06:10:55 【问题描述】:

大家早上好,希望有人可以帮助我解决以下问题。

mysql中,我需要比较不同员工填写的2张相同的表,并在记录有变化时返回,如果有变化,则必须返回“零件号”、“数量”并知道它是否属于表1 或表 2。 所以我创建了一个不存在的名为“TypeTable”的列,但它返回给我 NULL。

这是查询:

SELECT numParte
    ,Cantidad
    ,NULL AS "TypeTable"
FROM (
    SELECT numParte
        ,SUM(Cantidad) AS Cantidad
        ,"TypeTable" AS "Table1"
    FROM eboard.pye_hojadecarga
    WHERE id_chklistemb = 'IDHDC-1-HY'
    GROUP BY numParte

    UNION ALL

    SELECT numParte
        ,SUM(Cantidad) AS Cantidad
        ,"Table2"
    FROM eboard.pye_hojaconfirmacion
    WHERE id_hojadecarga = 'IDHDC-1-HY'
    GROUP BY numParte
    ) tbl
GROUP BY numParte
    ,Cantidad
HAVING count(*) = 1
ORDER BY numParte;

【问题讨论】:

a union all 不比较这两个表 - 它只是将所有行组合成一个结果。查看“完全外部连接”这里是一个参考:***.com/questions/4796872/… union all 不比较... !!!您需要完整的外部联接才能进行比较。 【参考方案1】:

您的外部查询不正确,它指定 NULL 作为要显示的值。而是简单地显示第三列:

SELECT numParte
     , Cantidad
     , TypeTable
FROM (
    SELECT numParte
         , SUM(Cantidad) AS Cantidad
         , 'Table1'      AS TypeTable
    FROM eboard.pye_hojadecarga
    WHERE id_chklistemb = 'IDHDC-1-HY'
    GROUP BY numParte

    UNION ALL

    SELECT numParte
         , SUM(Cantidad) AS Cantidad
         ,'Table2'       AS TypeTable
    FROM eboard.pye_hojaconfirmacion
    WHERE id_hojadecarga = 'IDHDC-1-HY'
    GROUP BY numParte
    ) tbl
GROUP BY numParte
       , Cantidad
HAVING count(*) = 1
ORDER BY numParte;

【讨论】:

哇,非常感谢。说真的,我脑洞大开,在 MySQL 文档中找不到答案。

以上是关于比较 2 个表并返回 MySQL 中的变化的主要内容,如果未能解决你的问题,请参考以下文章

MariaDB 比较 2 个表并删除不在第一个表中的位置(大数据集)

mysql加入3个表并计数

SQL - 连接 2 个表并返回 2 行之间的值差异

为啥需要重新连接数据库才能看到表数据的变化?

MySQL JOIN 2 个表并分别获取两个表的总和

MySql JOIN 3 个表并获取具有相同值的子行