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

173

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

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

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

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

Теги:
sql-update

6 ответов

309
Лучший ответ

В дополнение к этому ответу, если вам нужно динамически изменить 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'
  • 0
    да, INNER JOIN идеально подходит в этой ситуации. Я также использовал CONCAT_WS для объединения имени CONCAT_WS и SKU из другой таблицы
  • 0
    Это идеальное решение и для меня!
Показать ещё 4 комментария
136

вам нужно присоединиться к двум таблицам:

например, вы хотите скопировать значение 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
  • 1
    Ive более 1 КБ запись с разными именами и значением, здесь ваше высказывание только для 1-й записи
  • 0
    Вы можете просто удалить предложение where или изменить предложение where зависимости от ваших потребностей.
Показать ещё 7 комментариев
78

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

UPDATE TableB 
SET TableB.value = (
    SELECT TableA.value 
    FROM TableA
    WHERE TableA.name = TableB.name
);
  • 7
    Да, нет необходимости в сложных объединениях, когда все, что нам нужно, это обновить поле значением из другой таблицы.
  • 7
    Да, это работает нормально, но очень и очень медленно на больших наборах данных. Если вы работаете с небольшими таблицами, этот метод подойдет, но я рекомендую JOIN, как показано выше, для всего остального.
Показать ещё 3 комментария
3

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

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

--Store ваши данные во временной таблице Выберите * в tempTable из таблицы 1

--Now Обновить столбец ОБНОВЛЕНИЕ table1 SET table1.FileName = (выбрать FileName из tempTable, где tempTable.id = table1.ID);

-2

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

Таблица-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();
    }


}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню