3

tableAから行を空白にコピーしようとしていますtableB

tableAには列mytextがあり、行にはこの列からの重複があります。

質問 重複行がない A から B にコピーするにはどうすればよいmytextですか? つまり、2 つ以上の行に同一の値がある場合、mytextID 番号が最も小さい行を保持し、にコピーしtableBます。

最初は重複を削除しようとしましたが、エラーが発生し続けましたError Code: 1205. Lock wait timeout exceeded from this sql command:

DELETE n1 
FROM tableA n1, tableA n2 
WHERE n1.id > n2.id 
AND n1.mytext = n2.mytext

私はオンですamazons RDS

+---+-----+-----+------+-------+
|id |fname|lname|mytext|morevar|
|---|-----|-----|------|-------|
|   |     |     |      |       |
|   |     |     |      |       |
|   |     |     |      |       |
|   |     |     |      |       |
+------------------------------+ 
CREATE TABLE `tableB` (
    `id` int(11) NOT NULL,
    `fname` varchar(45) DEFAULT NULL,
    `lname` varchar(45) DEFAULT NULL,
    `mytext` mediumtext,
    `morevar` bigint(20) DEFAULT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1$$

これは機能しませんでした。重複をキャッチせず、単純にすべての値を tableA から tableB にコピーしました

INSERT INTO tableB (`id`,`fname`,`lname`,`mytext`,`morevar`)
SELECT DISTINCT tableA.id,tableA.fname,tableA.lname,tableA.mytext,tableA.morevar
FROM tableA
4

2 に答える 2

4

これを試して

INSERT INTO tableB (`id`,`fname`,`lname`,`mytext`,`morevar`)
SELECT id, fname, lname, mytext, morevar
FROM tableA a
WHERE id = (Select Min(id) FROM tableA
            WHERE myText = a.mytext)

バッチでこれを行う必要がある場合... (myText 条件を編集してバッチを制御します)

INSERT INTO tableB (`id`,`fname`,`lname`,`mytext`,`morevar`)
SELECT id, fname, lname, mytext, morevar
FROM tableA a
WHERE mytext < 'j'
   And id = (Select Min(id) FROM tableA
            WHERE myText = a.mytext)

INSERT INTO tableB (`id`,`fname`,`lname`,`mytext`,`morevar`)
SELECT id, fname, lname, mytext, morevar
FROM tableA a
WHERE mytext >= 'j'
   And mytext < 'r'
   And id = (Select Min(id) FROM tableA
            WHERE myText = a.mytext)

INSERT INTO tableB (`id`,`fname`,`lname`,`mytext`,`morevar`)
SELECT id, fname, lname, mytext, morevar
FROM tableA a
WHERE mytext >= 'r'
   And id = (Select Min(id) FROM tableA
            WHERE myText = a.mytext)
于 2013-06-28T02:50:18.750 に答える