[mysql] 다른 테이블의 값이있는 mysql 업데이트 열

나는 두 개의 테이블이 있습니다.

id  name  value
===================
1   Joe     22
2   Derk    30

각 테이블의 확인 이름 을 기준으로 valuefrom에서 tableAto 값을 복사해야 tableB합니다.

UPDATE진술에 대한 팁이 있습니까?



답변

이 답변 외에도 tableA.value에 따라 tableB.value를 동적으로 변경 해야하는 경우 다음과 같이 할 수 있습니다.

UPDATE tableB
INNER JOIN tableA ON tableB.name = tableA.name
SET tableB.value = IF(tableA.value > 0, tableA.value, tableB.value)
WHERE tableA.name = 'Joe'


답변

두 테이블을 결합해야합니다.

예를 들어 nametableA 의 값을 tableB동일한 위치 로 복사하려고합니다.ID

UPDATE tableB t1 
        INNER JOIN tableA t2 
             ON t1.id = t2.id
SET t1.name = t2.name 
WHERE t2.name = 'Joe'

업데이트 1

UPDATE tableB t1 
        INNER JOIN tableA t2 
             ON t1.id = t2.id
SET t1.name = t2.name 

업데이트 2

UPDATE tableB t1 
        INNER JOIN tableA t2 
             ON t1.name = t2.name
SET t1.value = t2.value


답변

두 번째 가능성은

UPDATE TableB 
SET TableB.value = (
    SELECT TableA.value 
    FROM TableA
    WHERE TableA.name = TableB.name
);


답변

안전 업데이트 모드를 사용하고 (KEY 열을 사용하는 WHERE없이 테이블을 업데이트하려고했음을 나타내는 오류가 발생하는 경우) 두 번째 옵션은 다음을 추가하여 실행할 수도 있습니다.

UPDATE TableB  
SET TableB.value = (  
SELECT TableA.value  
    FROM TableA  
    WHERE TableA.name = TableB.name  
)  
**where TableB.id < X**  
;


답변

    UPDATE    cities c,
          city_langs cl
    SET       c.fakename = cl.name
   WHERE     c.id = cl.city_id


답변

임시 테이블에 데이터 저장

Select * into tempTable from table1

이제 열을 업데이트하십시오.

 UPDATE table1
    SET table1.FileName = (select FileName from tempTable where tempTable.id = table1.ID);


답변

필자의 경우 허용 된 솔루션이 너무 느 렸습니다. 180K 개의 행이있는 테이블의 경우 업데이트 속도는 초당 약 10 행입니다. 이것은 조인 요소의 인덱스와 함께 있습니다.

마침내 절차를 사용하여 문제를 해결했습니다.

CREATE DEFINER=`my_procedure`@`%` PROCEDURE `rescue`()
BEGIN
    declare str VARCHAR(255) default '';
    DECLARE n INT DEFAULT 0;
    DECLARE i INT DEFAULT 0;
    DECLARE cur_name VARCHAR(45) DEFAULT '';
    DECLARE cur_value VARCHAR(10000) DEFAULT '';
    SELECT COUNT(*) FROM tableA INTO n;
    SET i=0;
    WHILE i<n DO
      SELECT namea,valuea FROM tableA limit i,1 INTO cur_name,cur_value;
      UPDATE tableB SET nameb=cur_name where valueb=cur_value;
      SET i = i + 1;
    END WHILE;

END

나는 그것이 나를 돕는 것처럼 미래에 누군가를 도울 수 있기를 바랍니다.