使用来自选择的值的Mysql更新[重复]
Posted
技术标签:
【中文标题】使用来自选择的值的Mysql更新[重复]【英文标题】:Mysql Update using value from select [duplicate] 【发布时间】: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 变量用于解释用途占位符。
有什么想法吗?
【问题讨论】:
【参考方案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 之后缺少逗号,无论如何它可以工作。谢谢!以上是关于使用来自选择的值的Mysql更新[重复]的主要内容,如果未能解决你的问题,请参考以下文章