ムービーデータベースを扱うMySQL 5.7のプロジェクトで作業しています。私は(私は変更することが許されておりませんことを)次の表があります。列が同じ値を持ち、それらの行をMySQLの同じプライマリキーに関連付けるときに行を削除する
CREATE TABLE `movies` (
`id` int NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL DEFAULT '',
`director` varchar(100) NOT NULL DEFAULT '',
PRIMARY KEY(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `genres` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `genres_in_movies` (
`genre_id` int NOT NULL,
`movie_id` int NOT NULL,
FOREIGN KEY (`genre_id`) REFERENCES `genres`(`id`),
FOREIGN KEY (`movie_id`) REFERENCES `movies`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
私はいくつかの有効なgenres
反映するために更新されなければならなかったレコードを持っていました。残念ながら、genres.name
のgenres.id
が異なるにもかかわらず、重複しています。私がしたいのは、すべてgenres.name
を単一のgenres.id
とgenres.name
に統合することです。私は、このテーブルがある場合たとえば、:
genres (old)
==================
id | name |
==================
2 | Romance |
------------------
6 | Romance |
------------------
45 | Romance |
==================
を私は単一のエントリのみgenres.id = 2
とgenres.name = 'Romance'
で終わるしたいです。
DELETE FROM genres
WHERE genres.id NOT IN (SELECT *
FROM (SELECT MIN(g.id)
FROM genres g
GROUP BY g.name)
x);
を私はまたmovies
テーブルが壊れないようにgenres.id
変更を反映するためにgenres_in_movies.genre_id
を更新できるようにしたい:
私は次のクエリで簡単にこれを行うことができます。では、どうすればgenres_in_movies
テーブルも更新できますか?
感謝を。残念ながら、最初のアップデートは機能しません。私は 'ERROR:1054、 'on clause'に 'g2.name'という未知の列がある – Alex