mysql - 设置应用组合唯一索引后在 mysql 上删除哪些行/忽略

标签 mysql indexing

假设我有一个包含几列的表格。 我知道如何查找重复项,然后使用此表达式仅保留一条记录,添加组合索引...

ALTER IGNORE TABLE part3 ADD UNIQUE INDEX (gtu, region, trait, pop, author, risk)

...但我希望能够控制哪一行将被删除;不仅仅是“唯一键上有重复项的第一行”,如 mysql doc 中所述。 。 我的意思是,我确实想指定未删除的行必须是列字段中具有次要值的行,称为 zvalue

有什么建议吗?这可能吗?

谢谢!

最佳答案

与其尝试删除不需要的内容,不如尝试将其视为一个问题,您可以选择自己想要的内容并忽略其余的内容;像这样:

CREATE TABLE `other_table` LIKE `part3`;
INSERT INTO `other_table`
SELECT `part3`.*
FROM (SELECT gtu, region, trait, pop, author, risk, MAX(zvalue) AS max_zval
    FROM `part3`
    GROUP BY gtu, region, trait, pop, author, risk
) `tmp`
INNER JOIN `part3` USING (gtu, region, trait, pop, author, risk)
WHERE `part3`.zvalue = `tmp`.max_zval;

这应该创建一个满足数据中唯一约束的表other_table;仅保留具有最高 zvalue 的行,删除(跳过)其他行。

关于mysql - 设置应用组合唯一索引后在 mysql 上删除哪些行/忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10756203/

相关文章:

mysql - PostgreSQL 与 MySQL 有何不同?

python - SQLAlchemy DB 升级和 MySQL SSH

mysql - 如何从 Node.js 中运行 Mysql Select 的函数返回值

python - 为什么我得到这个python语法indexerror

mysql - 防止查询使用索引

mysql - 错误 1045 (28000) : Access denied for user (using password: YES)

php - SELECT COUNT 包含日期和类型

java - 执行者服务中的执行者服务?

c - 被标记化的 fgets() 字符串是否能够被索引到字符中? :line[0], 错误:段

search - 我应该如何考虑搜索引擎索引?