2017-03-03 13 views
0

Accessでクエリを更新する際に問題があります。私は3つのテーブルを持っています:3つのテーブルを持つ結合クエリの更新

私はそれが正しいデザインであるかどうかは分かりませんが、今はあまり重要ではありません。

Excelデータでデータベースを更新したいとします。私はプロセスをより明確にするためにCityImportテーブルを作成することに決めました。私はこのテーブルに市の情報を入れて、それにCityの表を記入したいと思います。 UPDATE (CityImport INNER JOIN Country ON CityImport.Country = Country.CountryName) LEFT JOIN City ON City.CityName = CityImport.City AND City.CountryID = Country.ID SET City.CityName = CityImport.City, City.CountryID = Country.ID WHERE CityImport.City IS NOT NULLのようなクエリを実行すると、JOIN expression not supportedエラーが発生します。

私は構文に問題があると思っていましたが、JOINから1つの条件を削除してUPDATE (CityImport INNER JOIN Country ON CityImport.Country = Country.CountryName) LEFT JOIN City ON City.CityName = CityImport.City SET City.CityName = CityImport.City, City.CountryID = Country.ID WHERE CityImport.City IS NOT NULLのままにしておくと、正常に動作します。問題は、異なる国の同じ名前の都市を無視することです。

このような結合を正しく行うことはできますか?それとも定義上間違っていますか? 1つのテーブルを別のテーブルの2つの列にある別の結合結果と結合する必要があります。私はおそらく、この場合何とかそれを回避することができますが、私はもっと複雑なテーブルのために同じ方法を使いたいと思います。

私は何時間もの間、このクエリーを別のテイクでプレイしましたが、何百回もグーグルグーグルでグーグルで成功しました。

+0

http://stackoverflow.com/questions/15209414/how-to-do-3-table-join-in-update-query?rq=1 – Dave

+0

@Dave、それは私の正確な問題に対処していません。私はテーブルを結合する方法を知っている、私が働くことができないものは、ネストされた結合にある2つの異なるテーブルのフィールドにそれらを結合することです。 – brainac

答えて

1

私が見ることができる最初の問題は、UPDATEを使用してテーブルにデータを挿入していることです。 INSERT INTOを使用しているはずです。この表を皮切り


enter image description here

あなたが最初の国のテーブルにユニークな国の名前を挿入する必要があります:
enter image description here

INSERT INTO Country (Country) 
SELECT DISTINCT Country 
FROM CityImport 

これはあなたにこのテーブルを与えます

市の名前と市のテーブルのIDを入力する必要があります。

INSERT INTO City (CityName, CountryID) 
SELECT City, Country.ID 
FROM CityImport INNER JOIN Country ON CityImport.Country = Country.Country 

これは、このテーブルを返します。
enter image description here

編集:

テーブルの構造:
CityImport
市 - テキスト
国 - テキスト


ID - オートナンバー
国 - テキスト
主キー: ID


ID - オートナンバー
CityName - テキスト
CountryID - 数
主キー:ID
外部キー CountryID 参照

+0

ありがとうございました。 'CountryName'に関しては、それは単にタイプミスですが、良いキャッチです。 この場合はinsertを使うことができますが、このメソッドを他のテーブルに使い、新しいレコードを追加するだけでなく、既存のレコードを更新できるようにします。 – brainac

+0

私はシニアの瞬間をしていました - 再び見て、 'CityName'しか見ることができなかったので、私の編集はそれを指摘しましたが、もう一度それを見ることができます。私は本当に引退し、私の庭をつくる日々を過ごす必要があります。 :) –

+0

私は努力を感謝します:)私はおそらく、最初の参加から追加の一時テーブルを作成することによってそれを回避することができますが、私はそれを**正しい**方法で行うことを望みました。一般的に、データベースに関しては良い方法を見つけるのは難しいです。周囲にはさまざまなアプローチがあります。 – brainac

関連する問題