0

t2以下は、挿入したい参照テーブルから値を取得するか、 in table で既存のタプルを更新しますt1

SELECT 
  id, col1 
FROM 
  t2
LEFT OUTER JOIN 
  t1
ON 
  t2.id=t1.id

のタプルがidすでに に存在する場合はt1、 から選択した値で更新する必要がありますt2。のタプルが にid存在しない場合はt1(id, col1)他の列をデフォルト値に設定して挿入する必要があります。

これを効率的に行うには?

4

1 に答える 1

1

この2つを使ってquerys:

これにより、結合とフィルタリングが行われ、両方のテーブルに存在する値が得られるため、更新を行うだけです

    Update t1 set t1.col1 = t2.col1
from t1 inner join t2 on t1.id = t2.id

これにより結合とフィルタリングが行われ、t1 ではなく t2 にある値が得られるため、挿入を行うだけです。

    insert into t1 select t2.id, t2.col1 
from t2 left outer join t1 on t2.id = t1.id where t1.id IS NULL

アップデート:

ここからわかるように、MySQL はこれに別のシンタックスを使用します。したがって、上記のクエリの代わりにこれを使用してクエリを実行できます。

UPDATE t1 temp1
INNER JOIN t2 temp2
ON temp1.id= temp2.id 
SET temp1.col1= temp2.col1

ただし、概念は同じです (構文が異なるだけです)。INNER JOIN は一致/結合するフィールドのみを使用するため、Where は必要ありません。

于 2012-07-18T17:18:28.720 に答える