首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql更新和连接查询

Mysql更新和连接查询
EN

Stack Overflow用户
提问于 2019-07-28 08:19:07
回答 2查看 123关注 0票数 0

我在用Sum更新查询时遇到了问题。我有两张桌子运动和捐款。我想更新来自某项运动的每一笔捐款的总额。

tb_campaign

  1. id
  2. 名字
  3. total_donations

tb_donations

  1. id
  2. amount_donated
  3. campaign_id

我的当前查询不工作。

代码语言:javascript
复制
UPDATE
    tb_campaign AS campaigns
    LEFT JOIN (
        SELECT
            sum(amount_donated) AS amount_donated
        FROM
            tb_donations
        GROUP BY
            campaign_id
    ) AS donations ON
        donations.campaign_id = campaigns.id
SET
    campaigns.total_donations = donations.amount_donated;

我收到了我的查询错误

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-28 09:30:56

如果要根据匹配的记录更新tb_campaign.total_donations中的列,请尝试以下更新查询。

代码语言:javascript
复制
UPDATE tb_campaign AS campaigns
        INNER JOIN
    (SELECT 
        campaign_id, SUM(amount_donated) AS amount_donated
    FROM
        tb_donations
    GROUP BY campaign_id) AS donations ON donations.campaign_id = campaigns.id 
SET 
    campaigns.total_donations = donations.amount_donated;

如果您需要更新tb_campaign表中与total_donations中不匹配的所有列,请尝试这样做,注意:“列total_donations不能为空”添加了合并以避免空

代码语言:javascript
复制
UPDATE tb_campaign AS campaigns
        LEFT JOIN
    (SELECT 
        campaign_id,
            COALESCE(SUM(amount_donated), 0) AS amount_donated
    FROM
        tb_donations
    GROUP BY campaign_id) AS donations ON donations.campaign_id = campaigns.id 
SET 
    campaigns.total_donations = donations.amount_donated;
票数 0
EN

Stack Overflow用户

发布于 2019-07-28 09:27:03

您在子查询中错过了campaign_id,所以您的联接无法工作,因为没有donations.campaign_id

代码语言:javascript
复制
UPDATE  tb_campaign AS campaigns
LEFT JOIN (
        SELECT  campaign_id, sum(amount_donated) AS amount_donated
        FROM  tb_donations
        GROUP BY     campaign_id
    ) AS donations ON  donations.campaign_id = campaigns.id
SET    campaigns.total_donations = donations.amount_donated;

但是,由于您正在查找计算行,因此只有您的连接条件应该是内部连接。

代码语言:javascript
复制
UPDATE  tb_campaign AS campaigns
INNER  JOIN (
        SELECT  campaign_id, sum(amount_donated) AS amount_donated
        FROM  tb_donations
        GROUP BY     campaign_id
    ) AS donations ON  donations.campaign_id = campaigns.id
SET    campaigns.total_donations = donations.amount_donated;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57239111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档