我对(My)SQL中的UPDATE操作有疑问。
假设我们有两个包含3列的表:
村庄(villagename,riverdepth,countrycode)
国家/地区(国家/地区代码,国家/地区,人口)
我想从表'村'更新所有列'riverdepth'(但只有意大利的村庄)。国家代码必须从表“国家/地区”中检索,因为我们还不知道意大利的国家代码。
假设去年全国“意大利”的河流深度减少了10.000升,所有村庄都失去了相同数量的河流深度。
这是我到目前为止所提出的:
{Binding Path=is_accepted} should be replaced by your property {Binding Path=Is_accepted}
虽然这会返回错误'无效使用组功能'
答案 0 :(得分:0)
是的,由于count()
,您有一个隐式聚合。 update
中不允许这样做。相反,一种方法是预先聚合数据并使用join
:
UPDATE village v JOIN
(SELECT v.countrycode, count(v.villagename) as cnt
FROM village v
GROUP BY v.countrycode
) vv
ON v.countrycode = vv.countrycode
SET v.riverdepth = v.riverdepth - (10000 / vv.cnt)
WHERE v.countrycode IN (SELECT c2.countrycode
FROM country c2
WHERE c2.countryname = 'italy'
);
您的WHERE
子句也缺少IN
。
答案 1 :(得分:0)
使用UPDATE JOIN:
UPDATE village JOIN country USING(countrycode)
SET riverdepth = riverdepth - (10000 / COUNT(villagename))
WHERE countryname = 'italy'