问题:对于所有政府形式为“联邦共和国”的国家和地区 官方语言为“英语”或“德语”的人,加上100,000 根据他们的人口,将他们的GNPOld设置为等于当前 GNP,然后将其当前的GNP增加10,000
因此,我获得了以上ERD作为参考,并且在尝试回答问题时,我想知道是否需要在更新之前从表中选择列。
在https://dev.mysql.com/doc/refman/8.0/en/update.html上进行搜索后 我尝试过了
UPDATE country
SET Population = Population + 100000,
GNPOld = GNP,
GNP = GNP + 10000
WHERE GovernmentForm = 'Federal Republic' AND (Language = 'English' OR Language = 'German') AND IsOfficial = true;
AND
WITH GovernmentForm = 'Federal Republic' AND (Language = 'English' OR Language = 'German') AND IsOfficial = true
UPDATE country
SET ...
两者都不起作用。我猜我的代码结构对于这种查询是错误的。 指针或技巧将不胜感激。谢谢!
答案 0 :(得分:1)
您必须加入countryLanguage
才能获得Language
和IsOfficial
列。
UPDATE country AS c
JOIN CountryLanguage AS cl ON c.Code = cl.CountryCode
SET c.Population = c.Population + 100000,
c.GNPOld = c.GNP,
c.GNP = c.GNP + 10000
WHERE c.GovernmentForm = 'Federal Republic'
AND cl.Language IN ('English', 'German')
AND cl.IsOfficial = 'T';
此外,IsOfficial
是一个ENUM,而不是布尔值。而且我建议使用IN()
来测试几种可能性之一,而不是OR
。