根据值更新表而不重叠字段名称

时间:2013-12-13 12:09:41

标签: mysql sql if-statement sql-update case

我有两张桌子:

Table A with system values
------------------------
id  |  val_1  |  val_2 |
------------------------
 1  |   11    |   22   |
------------------------

Table B with user values
-----------------------
uid  |  set  |  val_3 |
-----------------------
 21  |   1   |   11   |
-----------------------
 68  |   2   |   22   |
-----------------------
 83  |   1   |   11   |
-----------------------

我想根据表A的值 val_1 val_2 更新表B中的 val_3 表B中的设置

所以,如果我改变:表A val_1 => 333,表A val_2 => 666,更新查询将表B更改为:


uid  |  set  |  val 3 |
-----------------------
 21  |   1   |   333  |
-----------------------
 68  |   2   |   666  |
-----------------------
 83  |   1   |   333  |
-----------------------

这可以在一个查询中使用吗? 现在我做:

$result=$mysql->query('SELECT val1,val2 from TABLE A WHERE id=1');
UPDATE TABLE B set val3=$result[0] WHERE set=1
UPDATE TABLE B set val3=$result[1] WHERE set=2

也许我可以做一个CASE WHEN但我不知道如何在没有表A的相应行值的情况下这样做。

3 个答案:

答案 0 :(得分:1)

试试这个:

UPDATE TableB
SET val3 = 
   CASE set
     WHEN 1 THEN (SELECT val1 FROM TableA WHERE id=1)
     WHEN 2 THEN (SELECT val2 FROM TableA WHERE id=1)
   END

答案 1 :(得分:1)

使用JOIN进行更新: -

UPDATE TableB
CROSS JOIN TableA
SET TableB.val_3 = CASE WHEN TableB.`set` = 1 THEN TableA.val_1 ELSE TableB.`set` = 2 THEN TableA.val_2 END
WHERE TableA.id=1
AND TableB.`set` IN (1,2)

答案 2 :(得分:0)

  UPDATE Table_B
   SET val_3 = 
   CASE set
   WHEN 1 THEN (SELECT val_1 FROM Table_A WHERE id=1)
   WHEN 2 THEN (SELECT val_2 FROM Table_A WHERE id=1)
   END