これが私のテーブルです:
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 の列の値が 3 ではなく id=1 の値である 2 であることはほとんど理解できません。最初の行に一致すると更新が停止しますか? この場合、t1 と t2 で完全なデータ一致が行われると思います。どんな助けでも大歓迎です!
アップデート
ありがとう、私が実際に扱っている状況は次のとおりです。
t2 の値については、',' で区切られたそれらを連結し、テーブル t1 の値に各 id でグループ化しますが、t1 の値のすべての要素は異なる必要があります。たとえば、上記のテーブル t1 と t2 のリストのように、更新操作の後、t1 の値は :"1,2,3" で、2 でも 3 でもありません。
関数 groupconcat() を使用すると、値を t1 の値と区別するのが難しくなります。
繰り返しますが、この場合のように行のみを更新するのは賢明ではないと思います。複数のテーブルにまたがる更新の場合、結合条件に一致するすべての行をループで 1 つずつ更新する必要があります。