这是我的桌子:
mysql> select * from t1;
+------+-------+
| id | value |
+------+-------+
| 1 | 1 |
+------+-------+
1 row in set (0.00 sec)
mysql> select * from t2;
+------+-------+
| id | value |
+------+-------+
| 1 | 2 |
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
+------+-------+
4 rows in set (0.00 sec)
然后,出于某种目的,我运行一个 sql 来更新表 t1 中的日期:
mysql> update t1 join t2 on t1.id=t2.id set t1.value=t2.value ;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
现在,看看变化:
mysql> select * from t1;
+------+-------+
| id | value |
+------+-------+
| 1 | 2 |
+------+-------+
1 row in set (0.00 sec)
我想知道为什么匹配的行数是 1 ,而且很难理解 t1 的列值的值为 2 ,其中 id=1 而不是 3。当它匹配第一行时更新是否停止?我认为在这种情况下,它将在 t1 和 t2 之间进行完整的数据匹配。任何帮助表示赞赏!
更新
谢谢,这是我正在处理的情况:
对于 t2 中的值,将它们以 ',' 分隔,并按每个 id 合并到表 t1 中的值组中,但是,t1 值中的所有元素都应该是不同的。例如:如上表 t1 和 t2 列表,更新操作后,t1 的值应为:“1,2,3”,既不是 2 也不是 3。
如果我使用函数 groupconcat(),则很难使值与 t1 的值不同。
Agin,我认为像这种情况下只更新行并不聪明。如果跨多个表进行更新,则连接条件匹配的所有行都应在循环中一一更新。