MySQL クエリの作成に関して別の問題があります。
2 つのデータベースがあり、それぞれに都市を含むデータベースがあります。私のクライアントは別の会社から古い Web サイトを取得しました。古いデータベースの都市と新しいデータベースの都市との相関関係を取得する必要があります。
データベースの構造は次のとおりです。
データベース1
CREATE TABLE new_cities (
new_id INT PRIMARY KEY,
new_postal_code INT,
new_city_name VARCHAR(255)
);
データベース2
CREATE TABLE old_cities (
old_id INT PRIMARY KEY,
old_postal_code INT,
old_city_name VARCHAR(255)
);
CREATE TABLE old_entries (
entry_id INT PRIMARY KEY,
city_id INT
);
したがって、データベースから別のデータベースにエントリを転送する必要がありますが、ID が異なるため、old_entries.old_city_id が新しいデータベースの正しい都市に対応しないという問題があります。
old_entries.* に加えて、郵便番号の対応によって取得した new_city_id を含むフィールド (または old_city_id を直接置き換える) を取得したいと考えています。
動作しない私の現在のクエリは次のとおりです。
SELECT *,
(SELECT database1.new_cities.id FROM database1.new_cities, database2.old_entries WHERE database1.new_cities.zipcode =
(SELECT database2.old_cities.cp FROM database2.old_cities, database2.old_entries WHERE database2.old_entries.city_id = database2.old_cities.old_id)
) AS newcp FROM database2.old_entries WHERE 1
サブクエリが複数の行を返すという論理メッセージが表示されます。
構造は次のようにする必要があります。
1 - 私の old_entry を取る
2 - old_entry.city_id を取得し、old_cities テーブルから対応する郵便番号を取得します
3 - この郵便番号を取得し、この郵便番号に対応する new_cities.new_id を取得します
4 - この new_id を行 AS newcp に追加します (または、city_id の値を直接置き換えます)。
クエリで各行に対応する new_city_id AS newcp を取得するにはどうすればよいですか?
編集: サンプル
記入例:
ID| CITY_ID
1 | 23000
old_cities サンプル
ID | ZIPCODE | NAME
23000 | 75000 | Paris
new_cities サンプル
ID | ZIPCODE | NAME
23000 | 13000 | Marseille
23500 | 75000 | Paris
期待される結果:
ID | OLD_CITY_ID | NEW_CITY_ID
1 | 23000 | 23500
または最終的に
ID | CITY_ID
1 | 23500
転送されたエントリがその city_id を保持する場合、それはもはやパリではなくマルセイユに対応することがわかります。そのため、entry.city_id の 23000 を都市パリの新しい ID である 23500 に置き換える必要があります。郵便番号 (75000) で識別