我有两个表:
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 的相应行值,我不知道该怎么做。
最佳答案
使用 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)
关于mysql - 根据值更新表而不重叠字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20566191/