mysql update列的值来自另一个表

cx6n0qe3  于 2021-07-24  发布在  Java
关注(0)|答案(8)|浏览(492)

我有两张table,看起来都像

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

我需要复制 valuetableAtableB 基于每个表中的检查名。
有什么建议吗 UPDATE 声明?

bkkx9g8r

bkkx9g8r1#

除此之外,如果需要根据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'
tjrkku2a

tjrkku2a2#

您需要连接两个表:
例如,要复制 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

vdzxcuhz

vdzxcuhz3#

第二种可能性是,

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

k5ifujac4#

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

t2a7ltrp5#

如果您使用的是安全更新模式(并且收到一个错误,表明您试图更新一个没有使用键列的where的表),那么第二个选项也是可行的,方法是添加:

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

**where TableB.id < X**

;
mftmpeh8

mftmpeh86#

将数据存储在临时表中

Select * into tempTable from table1

现在更新列

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

4jb9z9bj7#

就我而言,公认的解决方案太慢了。对于一个有180k行的表,更新速度大约是每秒10行。这与join元素上的索引有关。
我最终通过一个程序解决了我的问题:

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

我希望它将来能像帮助我一样帮助别人

5lhxktic

5lhxktic8#

如果两个表中都有公共字段,那么就太简单了!。。。。
table-1=要更新的表。table-2=从中获取数据的表格。
在表1中进行查询并找到公共字段值。
做一个循环,根据表1的值从表2中找到所有数据。
再次在表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();
    }

}

相关问题