2

複数の列を持つテーブルがあるとします。重複を見つける方法を知っています。次に、この式で1つのレコードだけを保持し、組み合わせたインデックスを追加します...

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

...しかし、削除される行を制御できるようにしたいと思います。ここでmysqldocに記載されているように、「一意のキーに重複する行の最初の行」があるものだけではありません。つまり、削除されていない行は、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 に答える