重複したレコードでデータベースをクリーンアップしようとしています。参照を単一のレコードに移動し、他のレコードを削除する必要があります。
プロモーターと会場の 2 つのテーブルがあり、それぞれに都市というテーブルへの参照があります。問題は、同じ名前で異なる ID を持つ都市が存在し、会場やプロモーターと関係があることです。
このクエリを使用すると、すべてのプロモーターと会場を 1 つの都市レコードでグループ化できます。
SELECT c.id as id, c.name as name, GROUP_CONCAT( DISTINCT p.id ) as promoters_ids, GROUP_CONCAT( DISTINCT v.id ) as venues_ids
FROM cities as c
LEFT JOIN promoters as p ON p.city_id = c.id
LEFT JOIN venues as v ON v.city_id = c.id
WHERE c.name IN ( SELECT name from cities group by name having count(cities.name) > 1 )
GROUP BY c.name
ここで、プロモーターに対して UPDATE クエリを実行し、city_id を上記のクエリの結果と等しくなるように設定します。
このようなもの:
UPDATE promoters AS pr SET pr.city_id = (
SELECT ID
FROM (
SELECT c.id as id, c.name as name, GROUP_CONCAT( DISTINCT p.id ) as promoters_ids
FROM cities as c
LEFT JOIN promoters as p ON p.city_id = c.id
WHERE c.name IN ( SELECT name from cities group by name having count(cities.name) > 1 ) AND pr.id IN promoters_ids
GROUP BY c.name
) AS T1
)
これどうやってするの?
ありがとう