我有两张桌子:
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的相应行值的情况下这样做。
答案 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