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

标签 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_1val_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/

相关文章:

mysql - 如何在mysql中获取本周前6周的结果

c++ - IF 或 WHILE 用于数字输入检查器

php - mysql_fetch_assoc() 的结果将旧值复合到新值上。有任何想法吗?

php - 直接从 Eloquent 查询中提取和格式化日期

sql - 向已存在的子查询引入简单计数子查询

javax.ejb.EJBException : java. lang.ClassCastException 抛出(HQL 查询)

MySQL链内JOIN错误

javascript - 带有 if 语句的 jquery 函数无法正常工作

java - 我想在给定日期之后显示明天的日期

mysql - 无法检查 MySQL 中的行状态(锁定或未锁定)