我有两个表,它们都长得像:
id name value
===================
1 Joe 22
2 Derk 30
我需要根据每个表中的检查名称,将tableA
中的value
值复制到tableB
中。
对于这个UPDATE
语句有什么建议吗?
我有两个表,它们都长得像:
id name value
===================
1 Joe 22
2 Derk 30
我需要根据每个表中的检查名称,将tableA
中的value
值复制到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'
你需要连接这两个表:
例如,你想要将tableA
中的name
值复制到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
where
子句。 - John WooSELECT t1.*, t2.* FROM tableB t1 INNER JOIN tableA t2 ON t1.name = t2.name
- John Woo第二种可能性是:
UPDATE TableB
SET TableB.value = (
SELECT TableA.value
FROM TableA
WHERE TableA.name = TableB.name
);
.name
建立索引,那么这是否仍然会很慢呢,@frijj2k? - Steverino UPDATE cities c,
city_langs cl
SET c.fakename = cl.name
WHERE c.id = cl.city_id
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);
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
我希望这篇文章能够像它帮助了我一样帮助将来的某个人
更新tableA表 将value字段设为tableB表的value字段 从tableB表中获取数据 条件是tableA表的name字段等于tableB表的name字段
如果两个表中有共同的字段,那就非常简单!
表1 = 你想要更新的表格。 表2 = 你取数据的表格。
$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();
}
}
INNER JOIN
是完美的选择。我还使用了CONCAT_WS
函数来合并另一张表中的产品名称和 SKU。 - vladkrasUPDATE participants_registrations INNER JOIN participants ON participants.id = participants_registrations.participantId INNER JOIN registrations ON registrations.id = participants_registrations.registrationId LEFT JOIN groups ON (groups.id = registrations.groupId) SET registrations.groupId = groups.id, registrations.groupName = groups.name, participants.memberOfGroupName = groups.name
- SequoyaINNER JOIN
是在name
上进行连接,而你的WHERE子句却在TableA.name上查找。 由于没有记录可以连接,JOIN操作将不会发生,因此你无法更新TableB中名称为Joe的记录,因为没有任何符合该条件的记录。 - Warren Sergent