下面的表:p_id是父id,old_id是以前的父id,现在需要把p_id的值改成id比如第一条数据,之前的父id是10,其实对应的是第二跳记录,所以更新后,p_id=2更新后的结果:这样的更新语句sql如何写?需要做的事情:通过p_id找到old_id,这时候的id就是要更新的值;第一条记录p_id==10,p_id=old_id=10的是第二天记录,把p_id更新成2
ringa_lee
長い間 MySQL クエリ操作を書いていませんでしたが、上のテーブルのレコードについては、p_id と old_id が 1 つのテーブルにあり、比較操作と更新操作の両方が必要であるという考えがあります。提案:
ステップ 1: メイン テーブル tmp_id、old_tmp_id (メイン テーブルの old_id に対応) に基づいて一時テーブルを分割する
tmp_id old_tmp_id
1 30
2 10
3 20
ステップ 2: 左結合クエリ、p_id == old_tmp_id、p_id = tmp_id に設定
表名テスト
テスト t1 を更新t1.p_id = t2.old_id で内部結合テスト t2 を更新t1.p_id = t2.id を設定
SQL ステートメントを修正できない場合は、それをトランザクションに入れて 2 回更新してください
UPDATE テスト t1INNER JOIN テスト t2 ON t1.p_id = t2.old_idSET t1.p_id = t2.id
長い間 MySQL クエリ操作を書いていませんでしたが、上のテーブルのレコードについては、p_id と old_id が 1 つのテーブルにあり、比較操作と更新操作の両方が必要であるという考えがあります。提案:
tmp_id old_tmp_id
1 30
2 10
3 20
表名テスト
テスト t1 を更新
t1.p_id = t2.old_id で内部結合テスト t2 を更新
t1.p_id = t2.id を設定
SQL ステートメントを修正できない場合は、それをトランザクションに入れて 2 回更新してください
UPDATE テスト t1
INNER JOIN テスト t2 ON t1.p_id = t2.old_id
SET t1.p_id = t2.id