updatemysql left outer join忽略数据,只写入一个特定值

vwkv1x7d  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(377)

我试图通过左外联接使用小表中的信息更新大表,这是用相同的值填充所有目标单元格,而不管小表中的值是多少。
如何将小表中的特定值正确写入大表中?
以下是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值所取的tablesmall parameter1值在parameter1中并不都有good。
如何将具体的tablesmall.parameter1值准确写入tablebig.parameter1?
谢谢!

laik7k3q

laik7k3q1#

问题出在你的 ON 条件:

ON tablebig.id AND tablesmall.id

每当tablebig.id和tablesmall.id都不为零时,都是这样。你应该做的是:

ON tablebig.id = tablesmall.id

同样在你的场景中(我想这是一个拼写错误),它应该是

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

相关问题