programing

다른 테이블의 값을 포함하는 mysql update 컬럼

newsource 2022. 9. 19. 23:45

다른 테이블의 값을 포함하는 mysql update 컬럼

테이블이 두 개 있어요 둘 다

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

값을 복사해야 합니다.value부터tableA로.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'

2개의 테이블을 결합해야 합니다.

예를 들어 값을 복사하는 경우name테이블 A에서 로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
);
    UPDATE    cities c,
          city_langs cl
    SET       c.fakename = cl.name
   WHERE     c.id = cl.city_id

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

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

임시 테이블에 데이터 저장

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

앞으로 누군가에게 도움이 됐으면 좋겠다.

양쪽 테이블에 공통 필드가 있으면 매우 간단합니다.

표 1 = 업데이트할 표.표-2 = 데이터를 가져올 표입니다.

  1. 표 1에서 쿼리를 작성하고 공통 필드 값을 찾습니다.
  2. 루프를 만들고 표 1 값에 따라 표 2의 모든 데이터를 찾습니다.
  3. 다시 표 1에 업데이트 쿼리를 만듭니다.

$qry_asseet_list = mysql_query("SELECT 'primary key field' FROM `table-1`");

$resultArray = array();
while ($row = mysql_fetch_array($qry_asseet_list)) {
$resultArray[] = $row;
}



foreach($resultArray as $rec) {

    $a = $rec['primary key field'];

    $cuttable_qry = mysql_query("SELECT * FROM `Table-2` WHERE `key field name` = $a");

    $cuttable = mysql_fetch_assoc($cuttable_qry);



    echo $x= $cuttable['Table-2 field']; echo " ! ";
    echo $y= $cuttable['Table-2 field'];echo " ! ";
    echo $z= $cuttable['Table-2 field'];echo " ! ";


    $k = mysql_query("UPDATE `Table-1` SET `summary_style` = '$x', `summary_color` = '$y', `summary_customer` = '$z' WHERE `summary_laysheet_number` = $a;");

    if ($k) {
        echo "done";
    } else {
        echo mysql_error();
    }


}

언급URL : https://stackoverflow.com/questions/11709043/mysql-update-column-with-value-from-another-table