tuple に一意の制約を持つマッピング テーブルがあります(c_id, t_id)。
状況を説明するためのサンプル データを次に示します。
id  c_id    t_id  
----------------
1   10      2
2   10      3
3   10      7
4   12      2
5   13      3
t_ids(x,y -> z OR x,y -> x)のマージ関数を作成しました。私のコンテンツ ( c_id) に両方がある場合t_ids、もちろん、次のステートメントを使用して制約に違反しています。  
UPDATE mapping_table
SET t_id = '$target_tid'
WHERE t_id = '$t1_id' OR t_id = '$t2_id';
結果は次のようになります。
id  c_id    t_id
----------------
1   10      4
2   10      4       /* violates unique constraint */
3   10      7
今、私はこれを思いつきました:
/* delete one of the duplicate entries */
DELETE FROM mapping_table
WHERE   ( SELECT count(c_id)
          FROM mapping_table
          WHERE t_id = '$t1_id' OR t_id = '$t2_id'
        ) > 1;
/* update the remaining row */
UPDATE mapping_table
SET t_id = '$target_tid'
WHERE t_id = '$t1_id' OR t_id = '$t2_id';
今、私は次のエラーが発生しています:
You can't specify target table 'mapping_table' for update in FROM clause
私の質問は次のとおりです。
- ここで何が間違っているのですか?ステートメントは
DELETE更新と見なされ、WHERE句で使用できませんか? - これを行うためのより効率的な方法はありますか?