私は2つのテーブルを持っています:
テスト1:
id int, value int, parentId int
と TEST2:
id int, value int, parentId int
TEST1 では、次のレコードを取得しました。
id value parentId
1 0 1
2 0 1
3 0 1
TEST2で、私は持っています:
id value parentId
1 0 1
複数のテーブル機能を使用して、1 回の更新で 2 つのテーブルを更新したいと考えています。目標は、TEST1 の各レコードに +1 値を追加し、parentId が TEST1 と類似している TEST2 のレコードに +1 値を追加することです。
私のクエリは次のとおりです。
UPDATE TEST1 t1
LEFT OUTER JOIN TEST2 t2 ON t1.parentId=t2.parentId
SET t1.value = t1.value + 1,
t2.value = t2.value + 1;
その後、SELECT を実行して、TEST1 の値が更新されたことを確認します。
SELECT * FROM TEST1;
それは私に与えます:
id value parentId
1 1 1
2 1 1
3 1 1
私は TEST2 をチェックします:
SELECT * FROM TEST2;
それは私に与えます:
id value parentId
1 1 1
私が奇妙だと思うのは、TEST2 のレコードの値が 1 であることです。TEST1 の更新は 3 つのレコードで行われ、TEST2 の更新は同じレコードで 3 回行われる必要があるため、3 を期待します。
3 ではなく 1 を取得するのはなぜですか? と 3 を取得するための正しいクエリは何ですか?
編集:私も試しました:
SET @var=1;
UPDATE TEST1 t1
LEFT OUTER JOIN TEST2 t2 ON t1.parentId=t2.parentId
SET t1.value = t1.value + 1,
t2.value = (@var:= @var + 1);
このクエリの後、 t2.value は 2 に等しくなります! そして、私が期待する4ではありません。