有没有一种方法可以通过“ WITH”语句获得输出?

时间:2020-01-29 23:53:30

标签: mysql database

问题:对于所有政府形式为“联邦共和国”的国家和地区 官方语言为“英语”或“德语”的人,加上100,000 根据他们的人口,将他们的GNPOld设置为等于当前 GNP,然后将其当前的GNP增加10,000

ERD

因此,我获得了以上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 ...

两者都不起作用。我猜我的代码结构对于这种查询是错误的。 指针或技巧将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

您必须加入countryLanguage才能获得LanguageIsOfficial列。

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