gpt4 book ai didi

mysql - 表有成对的匹配记录,只需要选择和更新一条记录

转载 作者:行者123 更新时间:2023-11-29 01:32:53 24 4
gpt4 key购买 nike

我有一个表,其中包含成对的匹配记录,我这样查询:

select id,name,amount,type from accounting_entries 
where name like "%05" and amount != 0 order by name limit 10;

结果:

+------+----------------------+--------+-------+
| id | name | amount | type |
+------+----------------------+--------+-------+
| 786 | D-1194-838HELLUJP-05 | -5800 | DEBIT |
| 785 | D-1194-838HELLUJP-05 | -5800 | DEBIT |
| 5060 | D-1195-UOK4HS5POF-05 | -5000 | DEBIT |
| 5059 | D-1195-UOK4HS5POF-05 | -5000 | DEBIT |
| 246 | D-1196-0FUCJI66BX-05 | -7000 | DEBIT |
| 245 | D-1196-0FUCJI66BX-05 | -7000 | DEBIT |
| 9720 | D-1197-W2J0EC1BOB-05 | -6500 | DEBIT |
| 9719 | D-1197-W2J0EC1BOB-05 | -6500 | DEBIT |
| 2694 | D-1198-MFKIKHGW0S-05 | -5500 | DEBIT |
| 2693 | D-1198-MFKIKHGW0S-05 | -5500 | DEBIT |
+------+----------------------+--------+-------+
10 rows in set (0.01 sec)

我需要执行更新,以便生成的数据如下所示:

+------+----------------------+--------+--------+
| id | name | amount | type |
+------+----------------------+--------+--------+
| 786 | D-1194-838HELLUJP-05 | -5800 | DEBIT |
| 785 | C-1194-838HELLUJP-05 | 5800 | CREDIT |
| 5060 | D-1195-UOK4HS5POF-05 | -5000 | DEBIT |
| 5059 | C-1195-UOK4HS5POF-05 | 5000 | CREDIT |
| 246 | D-1196-0FUCJI66BX-05 | -7000 | DEBIT |
| 245 | C-1196-0FUCJI66BX-05 | 7000 | CREDIT |
| 9720 | D-1197-W2J0EC1BOB-05 | -6500 | DEBIT |
| 9719 | C-1197-W2J0EC1BOB-05 | 6500 | CREDIT |
| 2694 | D-1198-MFKIKHGW0S-05 | -5500 | DEBIT |
| 2693 | C-1198-MFKIKHGW0S-05 | 5500 | CREDIT |
+------+----------------------+--------+--------+
10 rows in set (0.01 sec)

一个条目应该否定另一个条目。我更新第一个或第二个匹配记录并不重要,重要的是一个有正数,另一个有负数。并且需要更新类型和名称。

关于如何做到这一点的任何线索?更新命令会是什么样子?也许使用 group by 子句?我对如何使用存储过程有一些想法,但我可以通过简单的更新来完成吗?

最佳答案

试试这个:

UPDATE accounting_entries as ae
SET name = 'C' + SubString(name, 1, Length(name) - 1))
amount = amount * -1
type = 'Credit'
WHERE id =
(SELECT MIN(id) FROM
(SELECT * FROM accounting_entries) as temp
GROUP BY name)

关键是 WHERE 部分中的子查询,它将更新限制为每个名称值的最低 ID。假设较低的 ID 是您将始终要更新的 ID。如果这不正确,则根据您将使用的任何规则更新子查询。

编辑:根据发现的技术更新子查询here ,由于对 mysql 定义的限制 here .

此查询提供了一种一次更新所有记录的方法(因为这似乎是 OP 正在寻找的方法。但是,最有效的方法是在代码中枚举所有记录(php、asp .net 等),并通过基于代码的方法更新需要更改的行。这将消除在 mysql 中运行更新子查询所固有的性能问题。

关于mysql - 表有成对的匹配记录,只需要选择和更新一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6027383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com