0

同じ一意のキーを使用するが、同じ列を使用しない2つのテーブル(1つは小さい、もう1つは大きい)があります。

大きなテーブルから小さなテーブルに2つの列を移動する必要がありますが、小さなテーブルに存在するキーに対してのみです。

それに対してクエリを実行するときは、INNERJOINを使用します

SELECT * FROM my_bigtable AS big
  INNER JOIN my_smalltable AS small ON big.key = small.key;

よく働く。しかし今、私は小さなテーブルに2つの列(fname、lname)を追加しました。大きなテーブルにはこれらの列があります。反映されたキーのこれらの列のエントリをプルして、小さなテーブルの列に配置します。

INSERT INTO my_smalltable AS small
  SELECT FNAME,LNAME FROM my_bigtable AS big
    WHERE big.FNAME = small.FNAME
      AND big.LNAME = small.LNAME;

これは、小さなテーブルに存在する一意キーのレコードのみを小さなテーブルに移動しますか、それとも、一意のキーが小さなテーブルに存在するかどうかに関係なく、大きなテーブルから小さなテーブルにすべてを移動しますか?

4

2 に答える 2

1

試す:

UPDATE small
SET small.FNAME = big.FNAME,
small.LNAME = big.LNAME
FROM my_smalltable AS small
JOIN my_bigtable AS big
ON big.ID = small.ID

(内部)結合は、小さなテーブルに存在するレコードのみを選択します。

ただし、my_smalltableとmy_bigtableは実際には同じIDフィールドを使用しないでください。それぞれに独自の主キーが必要です。2つの間に外部キーを使用できます。例えば:

FROM my_smalltable AS small
JOIN my_bigtable AS big
ON big.bigID = small.bigID

ここで、bigIDはmy_bigtableの主キーですが、my_smalltableの外部キー(独自の主キーとmy_smalltable.smallIDがあります)。

于 2013-03-13T18:09:23.307 に答える
0

UPDATEステートメントは必要ありませんINSERT。これを試してください。

update my_smalltable small
INNER JOIN my_bigtable AS big ON small.key = big.key
SET small.FNAME = big.FNAME,
small.LNAME = big.LNAME
于 2013-03-13T18:08:24.353 に答える