mysql如何更新一个表中的某个字段值等于另一个表的某个字段值


update inner join on a.bid=b.id set a.x=b.x,a.y=b.y ;

 

这里使用了case when 这个小技巧来实现批量更新。
举个例子:

1
2
3
4
5
6
7
UPDATE  categories
     SET  display_order = CASE  id
         WHEN  1 THEN  3
         WHEN  2 THEN  4
         WHEN  3 THEN  5
     END
WHERE  id IN  (1,2,3)

这句sql的意思是,更新display_order 字段,如果id=1 则display_order 的值为3,如果id=2 则 display_order 的值为4,如果id=3 则 display_order 的值为5。
即是将条件语句写在了一起。
这里的where部分不影响代码的执行,但是会提高sql执行的效率。确保sql语句仅执行需要修改的行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行。

如果更新多个值的话,只需要稍加修改:

 
01
02
03
04
05
06
07
08
09
10
11
12
UPDATE  categories
     SET  display_order = CASE  id
         WHEN  1 THEN  3
         WHEN  2 THEN  4
         WHEN  3 THEN  5
     END ,
     title = CASE  id
         WHEN  1 THEN  'New Title 1'
         WHEN  2 THEN  'New Title 2'
         WHEN  3 THEN  'New Title 3'
     END
WHERE  id IN  (1,2,3)

到这里,已经完成一条mysql语句更新多条记录了。
但是要在业务中运用,需要结合服务端语言,这里以php为例,构造这条mysql语句:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
$display_order  = array (
     1 => 4,
     2 => 1,
     3 => 2,
     4 => 3,
     5 => 9,
     6 => 5,
     7 => 8,
     8 => 9
);
$ids  = implode( ',' , array_keys ( $display_order ));
$sql  = "UPDATE categories SET display_order = CASE id " ;
foreach  ( $display_order  as  $id  => $ordinal ) {
     $sql  .= sprintf( "WHEN %d THEN %d " , $id , $ordinal );
}
$sql  .= "END WHERE id IN ($ids)" ;
echo  $sql ;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM