mysql - 更新mysql左外连接忽略数据并只写入一个特定值

标签 mysql left-join

我尝试通过 LEFT OUTER JOIN 使用小表中的信息更新大表,用相同的值填充所有目标单元格 - 无论小表中的值如何。

如何将小表中的特定值正确写入大表中?

这是 SQL:

UPDATE tablebig
LEFT OUTER JOIN tablesmall
ON tablebig.id AND tablesmall.id
SET tablebig.parameter1 = Sheet1.parameter1;

以下是表格:

tablebig
========

id|email         |name   |parameter1|
-------------------------------------
1 |joe@joe.com   |joe    |
2 |jane@jane.com |jane   |
3 |sam@sam.com   |sam    |


tablesmall
==========

id|email         |parameter1|
-------------------------------------
1 |joe@joe.com   |good    |
2 |jane@jane.com |good    |
3 |sam@sam.com   |bad     |

输出: tablebig 中的所有行当前都已将 good 写入了parameter1,但从中获取 tablebig.parameter1 值的 tablesmallparameter1 值并不全部都具有 good 在参数 1 中。

如何将特定的 tablesmall.parameter1 值准确写入 tablebig.parameter1?

谢谢!

最佳答案

问题出在您的 ON 条件上:

ON tablebig.id AND tablesmall.id

只要 tablebig.id 和 tablesmall.id 都非零(始终如此),就会出现这种情况。你应该拥有的是:

ON tablebig.id = tablesmall.id

也在你的SET中(我认为这是一个错字)它应该是

SET tablebig.parameter1 = tablesmall.parameter1;

所以你的查询应该是:

UPDATE tablebig
JOIN tablesmall
ON tablebig.id = tablesmall.id
SET tablebig.parameter1 = tablesmall.parameter1;
SELECT * FROM tablebig

这将给出这个结果:

id  email           name    parameter1
1   joe@joe.com     joe     good
2   jane@jane.com   jane    good
3   sam@sam.com     sam     bad

关于mysql - 更新mysql左外连接忽略数据并只写入一个特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49915419/

相关文章:

php - 获取表 A 中几个 SQL 行(a_ID 和 avg_data)的平均值,其中在表 B 中(a_ID 按 b_ID 分组)

java - 在 Spring mvc 中设置日期和时间

mysql - 寻找替代 SQL 命令以在两个表中查找相同的值

PHP MySQL更新只更新一行

mysql - 左 JOIN 语法错误

mysql - SQL SELECT 结合 JOINS 和 CONTACTS 在一个选定字段中生成相同数据的多个条目

sql - 收集一组合并的几个表,所有表都链接到同一个( super )表

php - 警告 : mysqli_query(): Couldn't fetch mysqli

mysql - sql左连接限制子查询

mysql - 选择子表没有数据的客户