首页 > 解决方案 > 使用两个条件更新 sql 中的列

问题描述

我在 mysql 中有一个表,我想在其中将名为 status 的列中的记录更新为“Duplicate”。我想根据 2 个条件将记录标记为“重复”。

  1. 记录具有重复的客户 ID。

  2. 那些没有最近修改日期的记录将被标记为重复。

附上数据的图像以供参考

我已经尝试了下面的代码,但它给了我一个错误:

UPDATE test_sql_duplicate
SET status = 'Duplicate'
WHERE test_sql_duplicate.modi_date NOT IN (
    SELECT *, max(modi_date) 
    FROM test_sql_duplicate
    GROUP BY cust_id 
    HAVING COUNT(cust_id > 1)

标签: mysqlsqlsql-update

解决方案


我怀疑我们可能想要这样的查询:

 UPDATE TEST_SQL_DUPLICATE t
   JOIN ( 
          SELECT n.cust_id
               , MAX(n.modi_date) AS max_modi_date
            FROM TEST_SQL_DUPLICATE n
           GROUP
              BY n.cust_id
          HAVING COUNT(n.cust_id) > 1
      ) d
    ON d.cust_id       = t.cust_id
   AND d.max_modi_date > t.modi_date
   SET t.status = 'Duplicate'

给定样本数据:

 _row  cust_id    modi_date
       -------   ----------
    1      444   2019-10-28
    2      444   2019-10-28
    3      444   2019-10-29
    4      444   2019-10-30
    5      444   2019-10-30

此答案中的查询将标记第 1 到 3 行,将status列设置为'Duplicate'。第 4 行和第 5 行不会被标记,因为它们都具有相同的 (maximum) modi_date

如果我们HAVING从内联视图查询中省略该子句,我们也将获得相同的结果。


推荐阅读