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