2016-04-30 15 views
0

私は3つのテーブルを持っています。 企業、Kommuner and Fylker別のテーブルから選択してMySQLを更新

企業テーブルには、空白のフィールドforretningsadresse_fylkeがありますが、他のフィールドの値はforretningsadresse_kommuneです。

基本的には、forretningsadresse_kommuneの値に基づいてforretningsadresse_fylkeを入力する必要があります。

ここで、forretningsadresse_kommuneの値とforretningsadresse_fylkeの値がKommunerとFylkerテーブルに格納されています。

私はこのクエリを書いていますが、それは600秒後に "MySQLサーバーがなくなる"ため動作していないようです。

ここで、KommunerテーブルとFylkerテーブルの外観を示します。

Kommuner表

enter image description here

Fylker表

enter image description here

会社テーブル enter image description here

企業表

  | forretningsadresse_fylke | forretningsadresse_kommune | 
      |===========================|============================| 
      |       |       | 
      |       |       | 
      |       |       | 
      |       |       | 
      |       |       | 
      |       |       | 

質問に間違いがあったのでしょうか? また、私が更新しようとしているテーブル(Companies)には100万行以上のテーブルがあります。

ありがとうございます!

+0

テーブルを記述できますか?あるいは、「Companies」テーブル – wajeeh

+0

が投稿を編集していないといけません。今、あなたは会社のテーブルも見ることができます。 – Kaizokupuffball

答えて

1

あなたはを望んでいませんUPDATEステートメントの210。また、適切なjoinを使用する必要があります。だから、最初のリライトは次のとおりです。

UPDATE companies c JOIN 
     kommuner k 
     ON c.forretningsadresse_kommune = k.kommuneNavn 
    SET c.forretningsadresse_fylke = (SELECT f.fylkeNavn 
             FROM fylker f 
             WHERE f.fylkeID = k.fylkeID 
            ); 

我々はfylkerで、単一の試合を想定した場合、これは結構です。複数のマッチがある場合は、1つを選択する必要があります。簡単な方法は次のとおりです。

UPDATE companies c JOIN 
     kommuner k 
     ON c.forretningsadresse_kommune = k.kommuneNavn 
    SET c.forretningsadresse_fylke = (SELECT f.fylkeNavn 
             FROM fylker f 
             WHERE f.fylkeID = k.fylkeID 
             LIMIT 1 
            ); 

注:一致する「kommuner」を持つすべての会社が更新されます。一致する "fylker"がない場合、値はNULLに設定されます。私はこれがあなたの質問の意図だと信じています。

また、テーブルエイリアスを使用すると、クエリの書き込みおよび読み取りが容易になります。

+0

さあ、ありがとう!あなたが作成した最後のクエリは素晴らしい作品です! 私はUPDATEの中でJOIN文を使うことができませんでした。しかし、私が知っていることを知っ私は毎日何か新しいことを学びます!ありがとうございました! :) – Kaizokupuffball

0
UPDATE companies 
SET companies.forretningsadresse_fylke = fylker.fylkeNavn 
FROM companies, fylker, kommuner 
WHERE companies.forretningsadresse_kommune = kommuner.kommuneNavn AND fylker.fylkeID = kommuner.fylkeID 

https://stackoverflow.com/a/1068471/3866134

0

これを試してみてください:

UPDATE companies c 
SET companies.forretningsadresse_fylke = (
    SELECT fylkeNavn 
    FROM Commoner k Left join Fylker f ON f.fylkeID = k.fylkeID 
    where k.kommuneNavn = c.forretningsadresse_kommune 
) 
関連する問題