mysql - 使用两个条件更新 sql 中的列
问题描述
我在 mysql 中有一个表,我想在其中将名为 status 的列中的记录更新为“Duplicate”。我想根据 2 个条件将记录标记为“重复”。
记录具有重复的客户 ID。
那些没有最近修改日期的记录将被标记为重复。
我已经尝试了下面的代码,但它给了我一个错误:
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)
解决方案
我怀疑我们可能想要这样的查询:
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
从内联视图查询中省略该子句,我们也将获得相同的结果。
推荐阅读
- android - 如何使用聊天应用程序中的最后一条消息更新小部件
- javascript - 如何通过 ajax 传递 codeigniter 会话值
- spring - 配置数据源失败:未指定“url”属性,无法配置嵌入式数据源
- java - Switch 语句执行 2 件事情而不是 1 件
- django - 有什么方法可以将弹性搜索与 mongoengine 一起使用?
- c# - 此日历 C#(回历日期)不支持指定时间
- webpack - Webpack 相同的加载器,不同的规则
- drop-down-menu - 单击 li 时会出现一个下拉菜单,但再次单击 li 下拉菜单未关闭
- linux - 将 gstreamer 的输出重定向到 OpenCV
- python - Python。从文本文件中获取数据并放入数据框中