2017-12-30 38 views
1

에 쿼리의 결과를 추가하는 I이 값의 열 반환 다음 쿼리 :어떻게 열

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; 

가 어떻게 같은 테이블에있는 기존 열이 열을 복사 할 수 있습니까?

답변

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에서 테이블을 업데이트하는 방법이 지원되지 않습니다. 당신의 업데이트가 순환 될 수 있기 때문에 ...

어떤 경우 ... : MySQLUPDATE 이러한 유형의 쿼리를 제한하는 것을 제안 (예 : thisthis로)

정보는 내가 스택 오버플로 여기에 다양한 관련 게시물에서 수집 그 레코드를 업데이트하면 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을 사용하지 않는 것이 좋습니다. 하위 쿼리를 최적화하는 좋은 방법은 필요한 열만 사용하는 것입니다.

+0

"오류가 발생했습니다."From 절의 업데이트를 위해 대상 테이블 'IEX_Tick'을 지정할 수 없습니다. 검색 중이며 이것은 mysql 일 것 같습니다. – ajasif

+0

당신은 맞습니다. @ajasif. 편집. 몇 가지 조사를 수행하고 당신을 위해 일 해야하는 솔루션을 발견 –