Столбец обновления mysql со значением из другой таблицы

У меня есть две таблицы, похожие на

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

Мне нужно скопировать значение value с tableA на tableB на основе имени проверки в каждой таблице.

Любые подсказки для этого утверждения UPDATE?

Ответ 1

В дополнение к этому ответу, если вам нужно динамически изменить tableB.value в соответствии с tableA.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

Ответ 3

Вторая возможность:

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

Ответ 4

Второй вариант возможен также, если вы используете безопасный режим обновлений (и вы получаете сообщение об ошибке, указывающее, что вы пытались обновить таблицу без WHERE, которая использует столбец KEY), добавив:

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

Ответ 5

Храните ваши данные во временной таблице

Select * into tempTable from table1

Теперь обновите столбец

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

Ответ 6

В моем случае принятое решение было слишком медленным. Для таблицы со 180К строк скорость обновления составляла около 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

Я надеюсь, что это поможет кому-то в будущем, как это помогло мне

Ответ 7

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

Ответ 8

Если у вас есть общие поля в обеих таблицах, то это так просто!....

Таблица-1 = таблица, где вы хотите обновить. Таблица-2 = таблица, откуда вы берете данные.

  1. сделайте запрос в таблице 1 и найдите значение общего поля.
  2. сделать цикл и найти все данные из таблицы 2 в соответствии со значением таблицы 1.
  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();
    }


}