我有3张桌子。 公司,Kommuner和Fylker。
公司表格中包含空字段forretningsadresse_fylke
,但其他字段forretningsadresse_kommune
包含值。
基本上,我需要根据forretningsadresse_fylke
的值填写forretningsadresse_kommune
。
现在,forretningsadresse_kommune
的值和我想要的值forretningsadresse_fylke
存储在Kommuner和Fylker表中。
所以我写了这个查询,但这似乎不起作用,因为在600秒后,#MySQL服务器消失了#34;。
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表
Fylker表
公司表
| forretningsadresse_fylke | forretningsadresse_kommune |
|===========================|============================|
| | |
| | |
| | |
| | |
| | |
| | |
所以我想知道查询是否有问题? 此外,值得一提的是,我尝试更新的表(公司)有超过100万行。
提前致谢!
答案 0 :(得分:4)
您不希望在fylker
声明中使用UPDATE
。您还应该使用正确的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
。我相信这是你问题的意图。
此外,表别名使查询更容易编写和阅读。
答案 1 :(得分:2)
试试这个:
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
)
答案 2 :(得分:0)
你可以参考这个问题
https://stackoverflow.com/questions/15209414/how-to-use-join-in-update-query
UPDATE companies c
JOIN Kommuner k ON c.kommuneID = k.kommuneID
JOIN fylker f ON f.fylkeID = k.fylkeID
SET c.forretningsadresse_fylke = f.fylkeNavn
答案 3 :(得分:0)
UPDATE companies
SET companies.forretningsadresse_fylke = fylker.fylkeNavn
FROM companies, fylker, kommuner
WHERE companies.forretningsadresse_kommune = kommuner.kommuneNavn AND fylker.fylkeID = kommuner.fylkeID