2011-12-01 2 views
1

같은 열의 필드 값을 같은 열의 다른 필드로 복사하려고합니다. 내 추론은 필드가 ctrl-a로 구분되어 있으며 수동으로 삽입을 사용하여 필드를 입력하는 방법을 알지 못합니다. 하나의 열에있는 필드의 MySQL 복사 값이 테이블의 동일한 열에있는 다른 필드로 복사됩니다.

내가 시도 :

ERROR 1093 (HY000): You can't specify target table 

또는 삽입하는 방법을 알고있는 경우 CTRL + A뿐만 아니라 그건 내 문제를 해결할 값을 구분 :

update table_foo 
set my_column = 
(
    select my_column 
    from table_foo 
    where id=5 
) 
where id=1; 

이 나에게 제공합니다. 감사!

답변

3

"대상 테이블을 지정할 수 없습니다"라는 일반적인 해결 방법은 테이블을 읽으려는 시도가 아닌 UPDATE를 실행하기 전에 MySQL이 임시 테이블을 생성하도록하는 또 다른 하위 쿼리 계층에서이를 래핑하는 것입니다 즉, 업데이트하는 것과 동시에 :

UPDATE table_foo 
    SET my_column = 
     (SELECT my_column 
      FROM (SELECT my_column 
        FROM table_foo 
        WHERE id = 5 
       ) t 
     ) 
WHERE id = 1 
; 

그렇다면, 당신은 유일한 문제는 당신이 Ctrl-A를 입력하는 방법을 모르는 것이라고합니까? 그것은 훨씬 쉽게 해결됩니다. :-)   the built-in CHAR() function을 사용하십시오. 이 :

UPDATE table_foo 
    SET my_column = CONCAT(CHAR(1), 'text', CHAR(1)) 
WHERE id = 1 
; 

^Atext^A-my_column을 설정합니다.

(면책 조항 :이 둘은 모두 테스트되지 않았습니다.)

+0

CHAR()가 작동하는 것처럼 보입니다. thx – Stoob

+0

@ 스톱 : 천만에요! – ruakh

1

"ctrl-a"로 구분 된 값이 (어떤 문자 인코딩에서입니까?) 분명하지 않지만 다음은 사용자가 원하는 것을 처리하여 선택 항목을 가져올 수있는 전체 테이블 별칭을 만듭니다.

update table_foo set my_column = (SELECT my_column FROM (SELECT * FROM table_foo) AS t WHERE t.id = 5) where id=1

+0

확실하지 않지만 감사합니다. CHAR()는 – Stoob

1

mysql documentation에 살펴 보자 :

오류 1093 (ER_UPDATE_TABLE_USED) SQLSTATE = HY000 메시지 = "당신은 목표 테이블을 지정할 수 없습니다 'X' 을 업데이트 FROM 절에"하위 쿼리이기 때문에 당신은 UPDATE 문 내에서 과제에 대한 하위 쿼리를 사용할 수 있습니다

UPDATE t1 SET column2 = (SELECT MAX(column1) FROM t1); 

:이 오류는 테이블을 수정하고 하위 쿼리에서 같은 테이블에서 선택 에 시도하는 다음과 같은 경우에 발생 SELECT 문뿐만 아니라 UPDATE 및 DELETE 문에서도 유효합니다. 그러나 하위 쿼리 FROM 절과 업데이트 대상에 대해 동일한 테이블 (이 경우 테이블 t1)을 사용할 수 없습니다.

해결 방법은 @spud 및 @ruakh 답변을 읽으십시오.

관련 문제