【问题标题】:Update, Join and Select 2 tables to calculate a formula更新、连接和选择 2 个表以计算公式
【发布时间】:2016-01-25 13:37:54
【问题描述】:

我在tableB上显示了一个每天的“金额”

我想计算 tableA 中每个“Description”(总共 5 个)的数量:

所以,我的公式应该是:

tableA.Amount = tableB.Amount * tableA.Numbers / sum(tableA.Numbers) 
where tableA.date = tableb.date
group by tableA.Description

在 mySQL 中我使用的是这段代码:

update tableA
join tableB
on tableB.date = tableA.date  
set tableA.amount = tableB.amount * (select tableA.Numbers from tableA group by tableA.date, tableA.Description) / sum(tableA.Impressions)
where tableA.campaign = 'Autumn'
;

但它不起作用。

【问题讨论】:

  • 它不起作用?请提供更多信息,例如查询中的语法错误。语法对我来说看起来很奇怪。您是如何找到此查询的??
  • @Pieter21 错误代码:1093。您不能在 FROM 子句中指定目标表 'tableA' 进行更新
  • 我认为您的内部查询会导致简单的更新语句过于复杂(如分组记录列表)。我认为它又回到了绘图板上。

标签: mysql select join sql-update


【解决方案1】:

您可以将逻辑移至from 子句。确切地弄清楚你想要做什么有点困难,但我认为它是这样的:

update tableA a join
       tableB b
       on b.date = a.date join 
       (select a.date, sum(a.Numbers) as sumn
        from tableA a
        group by a.date
       ) da
       on a.date = da.date join
    set a.amount = b.amount * a.Numbers / da.sumn
where a.campaign = 'Autumn';

我不知道campaign 上的过滤器在做什么,因为它不在您的示例数据中。

【讨论】:

  • 好主意。我不得不修改它以使其工作。但是,它对我帮助很大!
  • 必须根据之前的代码进行修改。我不是说你犯了一个错误。只是为了澄清:)
【解决方案2】:

如果按照下面的示例修改语法,它可能应该可以工作。如果提供了错误,将有助于修复。

更新表1 SET column1 = (SELECT 表达式1 从表 2 WHERE 条件) WHERE 条件;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 2014-04-08
    • 2018-10-10
    相关资源
    最近更新 更多