我有以下查询返回一列值:
SELECT CONCAT(
from_unixtime(lastSaleTime/1000, '%Y-%d-%m %h:%i:%s.'),
CAST(EXTRACT(MICROSECOND FROM from_unixtime(lastSaleTime/1000))/1000
AS SIGNED)
) FROM IEX_Tick;
如何将此列复制到同一个表中的现有列?
答案 0 :(得分:1)
我相信子查询可以做到:
UPDATE IEX_Tick SET SomeColumn = (
SELECT CONCAT(
from_unixtime(lastSaleTime/1000, '%Y-%d-%m %h:%i:%s.'),
CAST(EXTRACT(MICROSECOND FROM from_unixtime(lastSaleTime/1000))/1000 AS SIGNED)
) FROM IEX_Tick;
)
修改强>
(响应this comment)
在做了一些研究之后,我发现即使上面建议的解决方案有效SQL
,也不支持更新MySQL
中的表格。
我从Stack Overflow上的各个相关帖子收集的信息(例如this和this)表明MySQL
限制了这些类型的UPDATE
查询:
...因为您的更新可能是周期性的...如果更新该记录会导致某些事情发生,导致WHERE条件为FALSE会怎么样?你知道情况并非如此,但引擎却没有。在操作中桌面上也可能存在相反的锁定。
因此,有助于避免MySQL
设置的任意限制的可行替代方法是使用另一个子查询,这次是在FROM
子句中,如下所示:
UPDATE IEX_Tick SET SomeColumn = (
SELECT CONCAT(
from_unixtime(lastSaleTime/1000, '%Y-%d-%m %h:%i:%s.'),
CAST(EXTRACT(MICROSECOND FROM from_unixtime(lastSaleTime/1000))/1000 AS SIGNED)
) FROM (
SELECT * FROM IEX_Tick AS SomeName
);
)
注意:我个人会避免使用SELECT * FROM IEX_Tick
,尤其是IEX_Tick
有很多列时。我优化子查询的好方法是只使用所需的列。