我有一个疑问:
从民航组织=“SSPB”的天气中选择*,从民航组织=“SSPB”的天气中选择时间戳=(选择最大值(时间戳));
结果:
timestamp, ICAO, time, wind_angle, wind_speed, gust, visibility, condition, sky, temp, dew, pressure, humidity
2018-04-02 19:20:01, SSPB, 021919, 230, 03, , 9999, , SCT026, 23, 17, 1012, 67%现在我将使用与select相同的方法进行更新。
更新天气集wind_speed = '10‘,其中国际民航组织= 'SSPB’和时间戳=(选择最大(时间戳)从天气民航组织= 'SSPB');
我知道这个错误:
错误代码: 1093。不能指定目标表“天气”以便在FROM子句中进行更新
发布于 2018-04-02 19:44:53
您是派生合并优化的受害者。但是,您可以通过创建临时表并避免使用另一个select行。试试这个:
update weather set wind_speed = '10' where ICAO = 'SSPB' and timestamp =
( select c.cTime from
(select max(timestamp) as cTime
from weather where ICAO = 'SSPB'
) as c
);发布于 2018-04-02 19:47:31
一个可能的解决方法是连接到内联视图(派生表)。我们可以用SELECT语句.
SELECT t.*
FROM weather t
JOIN ( SELECT q.ICAO
, MAX(q.timestamp) AS max_timestamp
FROM weather q
WHERE q.ICAO = 'SSPB'
GROUP BY q.ICAO
) s
ON t.ICAO = s.ICAO
AND t.timestamp = s.max_timestamp
WHERE t.ICAO = 'SSPB' 同样的模式也适用于UPDATE。通过用SELECT ... FROM替换UPDATE并在WHERE子句之前添加SET子句,我们可以将SELECT语句转换为UPDATE:
UPDATE weather t
JOIN ( SELECT q.ICAO
, MAX(q.timestamp) AS max_timestamp
FROM weather q
WHERE q.ICAO = 'SSPB'
GROUP BY q.ICAO
) s
ON t.ICAO = s.ICAO
AND t.timestamp = s.max_timestamp
SET t.wind_speed = '10'
WHERE t.ICAO = 'SSPB' https://stackoverflow.com/questions/49617524
复制相似问题