0

positions ' 'という名前のフィールドを 1 つ含むテーブルが 2 つあり、' tripname' tripsというフィールドが含まれていますname

これらの 2 つのテーブルにデータをインポートする csv ファイルを使用していますが、さらに更新を行う必要があり、少し行き詰まっています。

' positions' テーブルは、csv ファイルに含まれている行を追加することによって更新されます。1 つのフィールドは ' tripname' (値を含む) と呼ばれ、もう 1 つのフィールドは ' ' ( FK_Trips_IDNULL として追加される) と呼ばれます。

' trips' テーブルは、'name' と呼ばれるフィールドと 'ID' と呼ばれる別のフィールドを含む 1 つの行 (まだ存在しない場合) だけで更新されます。

ここが私が立ち往生している場所です。する必要がある:

Insert into the 'positions.FK_Trips_ID' field the value of the 'trips.ID'
where the 'trips.name' is equal to the 'positions.tripname
- BUT only if 'positions.FK_Trips_ID' is NULL

このタイプの挿入の同様の例を見つけることができず、親切な魂が私を正しい方向に向けることができるかどうか疑問に思いました.

4

1 に答える 1

2

テーブルの一致するレコードに基づいて、テーブルからUPDATE列を作成することを意味していると思います。FK_Trips_IDpositionstrips

両方のテーブルを結合して、データベースに 1 つのリクエストのみを含めることができます。

UPDATE  positions a
        INNER JOIN trips b
            ON a.tripname = b.name
SET     a.FK_Trips_ID = b.ID
WHERE   a.FK_Trips_ID IS NULL

ステートメントのパフォーマンスを高速化するUPDATEには、列をインデックスにして、大規模なデータベースで実行するときに低速になるフル テーブル スキャンを実行しないようにする必要があります。

ALTER TABLE positions ADD INDEX (tripname);
ALTER TABLE trips ADD INDEX (name);
于 2013-03-29T12:58:30.543 に答える