【问题标题】:Mysql Update using value from select [duplicate]使用来自选择的值的Mysql更新[重复]
【发布时间】:2019-09-21 19:47:41
【问题描述】:

我有一个天气应用程序,我每小时将气象数据存储在数据库中。

最近我发现了一个小错误,导致写入了数百条错误记录。

为了解决这个问题,我决定使用当天的平均值更新所有错误记录。

我有以下 3 个查询来检索我需要的值:

select TRUNCATE( ( sum(temperature) / count(*) ), 2) as myTempAvg  from MY_TABLE where rawData not in ('chron', 'fallback') and DATE(transmissionDate) = DATE('2019-01-27');
select TRUNCATE( ( sum(humidity) / count(*) ), 2) as myHumyAvg  from MY_TABLE where rawData not in ('chron', 'fallback') and DATE(transmissionDate) = DATE('2019-01-27');
select TRUNCATE( ( sum(pressure) / count(*) ), 0) as myPressAvg  from MY_TABLE where rawData not in ('chron', 'fallback') and DATE(transmissionDate) = DATE('2019-01-27');

我正在尝试找出一种在 UPDATE 语句中使用上述查询的方法。比如:

update MY_TABLE set temperature = $QUERY_1_RESULT , humidity = $QUERY_2_RESULT , pressure = $QUERY_3_RESULT where rawData in ('chron', 'fallback')  and DATE(transmissionDate) = DATE('2019-01-27');

注意:$QUERY 变量用于解释用途占位符。

有什么想法吗?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您应该能够按照以下方式进行操作。

    INSERT INTO MY_TABLE (temperature)
    SELECT TRUNCATE( ( sum(temperature) / count(*) ), 2) as myTempAvg  
    FROM MY_TABLE 
    WHERE rawData not in ('chron', 'fallback')
    AND DATE(transmissionDate) = DATE('2019-01-27');
    

    【讨论】:

      【解决方案2】:

      你可以试试下面-

      update MY_TABLE 
      (
      select TRUNCATE( ( sum(temperature) / count(*) ), 2) as myTempAvg ,
      TRUNCATE( ( sum(humidity) / count(*) ), 2) as myHumyAvg,
      TRUNCATE( ( sum(pressure) / count(*) ), 0) as myPressAvg
      from MY_TABLE 
      where rawData not in ('chron', 'fallback') and DATE(transmissionDate) = DATE('2019-01-27')
      )as src
      set temperature=myTempAvg ,humidity = myHumyAvg , pressure = myPressAvg
      where rawData in ('chron', 'fallback')  and DATE(transmissionDate) = DATE('2019-01-27')
      

      【讨论】:

      • 在 MY_TABLE 之后缺少逗号,无论如何它可以工作。谢谢!
      猜你喜欢
      • 2018-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多