2016-04-30 95 views
0

我有3個表。 公司,Kommuner和Fylker。MySQL更新與從另一個表中選擇

公司表格有一個空字段forretningsadresse_fylke,但其他字段forretningsadresse_kommune有一個值。

所以基本上,我需要填寫forretningsadresse_fylke,根據forretningsadresse_kommune的值。

現在,forretningsadresse_kommune的值和我想要的值forretningsadresse_fylke存儲在Kommuner和Fylker表中。

所以我寫了這個查詢,但似乎沒有工作,因爲600秒後「MySQL服務器消失」。

UPDATE companies, fylker, kommuner 
SET companies.forretningsadresse_fylke = (
    SELECT fylkeNavn 
    FROM fylker 
    WHERE fylker.fylkeID = kommuner.fylkeID 
) 
WHERE companies.forretningsadresse_kommune = kommuner.kommuneNavn 

這是Kommuner和Fylker表的樣子。

Kommuner表

enter image description here

Fylker表

enter image description here

公司表 enter image description here

公司表

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

所以我想知道是否有問題的查詢? 另外,它可能是很好的提及,我嘗試更新的表(公司)有超過100萬行。

在此先感謝!

+0

你能描述你的表嗎?或至少'公司'表 – wajeeh

+0

我編輯了這篇文章。現在你也可以看到公司的表格了。 – Kaizokupuffball

回答

1

你不想fylkerUPDATE聲明中。你也應該使用合適的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單匹配,那麼這很好。如果有多個匹配,那麼你需要選擇一個。一個簡單的方法是:

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語句,雖然這只是用於SELECT。但知道我知道。我每天都會學到新的東西!謝謝! :) – 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 
)