나는 하위 쿼리 할 것이라고 믿는다
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
에서 테이블을 업데이트하는 방법이 지원되지 않습니다. 당신의 업데이트가 순환 될 수 있기 때문에 ...
어떤 경우 ... : MySQL
이 UPDATE
이러한 유형의 쿼리를 제한하는 것을 제안 (예 : this 및 this로)
정보는 내가 스택 오버플로 여기에 다양한 관련 게시물에서 수집 그 레코드를 업데이트하면 WHERE 조건을 거짓으로 만든 무언가가 발생합니까? 그건 사실이 아니지만 엔진은 그렇지 않습니다. 또한 작업 중에 테이블에 반대 잠금이있을 수 있습니다. 아래 그림과 같이
따라서, 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
);
)
참고 : 나는 것 특히 IEX_Tick
에 많은 열이있는 경우에는 SELECT * FROM IEX_Tick
을 사용하지 않는 것이 좋습니다. 하위 쿼리를 최적화하는 좋은 방법은 필요한 열만 사용하는 것입니다.
"오류가 발생했습니다."From 절의 업데이트를 위해 대상 테이블 'IEX_Tick'을 지정할 수 없습니다. 검색 중이며 이것은 mysql 일 것 같습니다. – ajasif
당신은 맞습니다. @ajasif. 편집. 몇 가지 조사를 수행하고 당신을 위해 일 해야하는 솔루션을 발견 –