基于来自多个表的数据在SQL中更新

时间:2016-03-09 11:35:51

标签: mysql sql select

我对(My)SQL中的UPDATE操作有疑问。

假设我们有两个包含3列的表:

  • 村庄(villagename,riverdepth,countrycode)

  • 国家/地区(国家/地区代码,国家/地区,人口)

我想从表'村'更新所有列'riverdepth'(但只有意大利的村庄)。国家代码必须从表“国家/地区”中检索,因为我们还不知道意大利的国家代码。

假设去年全国“意大利”的河流深度减少了10.000升,所有村庄都失去了相同数量的河流深度。

这是我到目前为止所提出的:

{Binding Path=is_accepted} should be replaced by your property {Binding Path=Is_accepted}

虽然这会返回错误'无效使用组功能'

2 个答案:

答案 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'