gpt4 book ai didi

用于从表中删除某些行的 MySQL 脚本

转载 作者:太空宇宙 更新时间:2023-11-03 12:14:46 25 4
gpt4 key购买 nike

我有一个具有以下结构的表:

ID | FK_1 | FK_2 | MONTH | STATE

12 171 26 4 APPROVED
13 171 26 4 SUPER_APPROVED
14 56 32 4 APPROVED
15 45 34 4 SUPER_APPROVED
16 45 34 4 APPROVED
17 22 65 4 REJECTED

我需要删除重复的行,以便只有一行包含 FOREIGN_KEY_1、FOREIGN_KEY_2 和 MONTH 的每种可能组合。

如果该组合有两行(例如上面的行 ID 12 和 13 或 15 和 16),我只想保留状态为 SUPER_APPROVED 的行。

脚本运行后,我希望表中包含以下数据(基于上面的示例数据):

ID | FK_1 | FK_2 | MONTH | STATE

13 171 26 4 SUPER_APPROVED
14 56 32 4 APPROVED
15 45 34 4 SUPER_APPROVED
17 22 65 4 REJECTED

任何帮助将不胜感激

最佳答案

我们的想法是生成一个您要保留的行的列表。这是执行此操作的查询:

      select FK_1, FK_2, MONTH,
coalesce(min(case when state = 'SUPER_APPROVED' then id end),
min(id)
) as id
from table t
group by FK_1, FK_2, MONTH;

请注意,当组合有 1 行时,该行的 ID 在 id 中。否则,它会遵循您首选 SUPER_APPROVED 行的规则。

您可以使用 left outer join 将其用于 delete:

delete t
from table t left outer join
(select FK_1, FK_2, MONTH,
coalesce(min(case when state = 'SUPER_APPROVED' then id end),
min(id)
) as id
from table t
group by FK_1, FK_2, MONTH
) as tokeep
on t.id = tokeep.id
where tokeep.id is null;

关于用于从表中删除某些行的 MySQL 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22687890/

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