2

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

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

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

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

谢谢!

4

1 回答 1

2

不要试图删除你不需要的东西,而是试着把它想象成一个问题,你想选择你想要的,而忽略其余的;像这样:

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被保留,其他的被删除(跳过)。

于 2012-05-25T14:48:27.803 回答