mysql - Mysql - 仅更新来自相同记录的 1 行
问题描述
我需要更新在借方列中具有相同值的行和只有具有 create_date ASC 的行,基本上是 2019-11-15
我有以下数据的交易表
table name - tbl_transactions
id client_id user_id debit add_date
1 9991101 1 7.69 2019-11-15
2 9991101 1 7.69 2019-11-30
3 9991101 2 28.9 2019-11-15
4 9991101 2 11.49 2019-11-30
现在我只想更新列“借方”和日期“2019-11-15”中具有相同值的记录
这意味着只有 id-1 会被更新。
id client_id user_id debit add_date
1 999110100 1 7.69 2019-11-15
我们可以在 client_id 字段中添加额外的 00,我尝试过使用下面的 sql 但似乎它不起作用
UPDATE tbl_transactions
SET client_id=999110100
WHERE id IN (
SELECT *
FROM tbl_transactions
WHERE client_id=9991101
AND DATE(create_date)='2019-11-15'
GROUP BY user_id, debit HAVING COUNT(*) = 2 )
提前致谢。
解决方案
Mysql 无法在 FROM 子句中指定更新的目标表。
您需要使用子查询在临时表中选择它们并更新它,
您可以使用CONCAT将您的 client_id 与00
,
根据您的帖子,您需要按 created_date ASC 进行相同的借记和订单,
但是,mysql 不能只对 group 中的字段进行排序,因此您可以这样做:
UPDATE
`tbl_transactions`
SET
`client_id` = CONCAT(client_id, '00')
WHERE id IN (
SELECT id FROM (
SELECT t2.id, t2.user_id t2.created_date FROM
(
SELECT id, user_id, MIN(created_date) AS created_date
FROM tbl_transactions
WHERE client_id=9991101
GROUP BY user_id, debit
HAVING COUNT(*) >= 2
) AS t1
INNER JOIN tbl_transactions AS t2
ON t1.user_id = t2.user_id AND t1.debit = t2.debit AND t2.client_id = 9991101 AND t1.created_date = t2.created_date
GROUP BY t2.user_id
) AS temp_table
)
推荐阅读
- amazon-cognito - AWS-Cognito 和 Shibboleth 有什么区别?
- apache-kafka - Pub/Sub 和消费者感知发布。没有人订阅时停止生产
- android - 为什么在行生成器中未使用 setPrimaryAction 时切片未在 sliceviewer apk 中呈现
- javascript - 转换 tfjs 模型以在 C++ 中的 Tensorflow 中使用
- javascript - 当节点频繁更新时,清理事件侦听器或任何其他附加资源
- node.js - 从流响应中读取并将其写入另一个响应节点 js
- python - 如何将此函数转换为生成器?
- css - Firefox 和 Chrome 中的 Flexbox 换行和溢出行为不同
- python-3.x - Matplotlib 颜色错误
- google-apps-script - 如何将此脚本应用于谷歌表格中的整个列?