2012-04-25 11 views
1
parent_table: 
ID | FIELD1 | FIELD2 
____|________|________ 
1 |........|...... 
2 |........|..... 
3 |.............. 

child_table: 
ID | FIELD3 
___|________ 
1 | 18 
1 | 7 
2 | .. 
1 | .. 
3 | .. 
2 | .. 

を複数の行の更新に参加します。 これは私が達成するために必要なものである:各IDの子テーブルのエントリ数が、更新時に変更できることだが、私はこれらのテーブルを更新したいとしましょう、子テーブルの上に

UPDATE parent_table SET 
    FIELD1 = 'XXX', 
    FIELD2 = 'YYY' 
WHERE ID = 2; 

DELETE FROM child_table 
WHERE ID = 2; 

INSERT INTO child_table (ID, FIELD3) 
    VALUES (2, 50), 
    VALUES (2, 17), 
    VALUES (2, 9); 

ノート。

それはちょうど1つのクエリで同じ結果を得ることは可能ですか? トランザクションを使用することはできません。

は多分最初の2つのクエリが合併しやすくなります。 私は子テーブルを結合し、UPDATEの間にnull値を設定しようとしましたが、私は それはあなたがSELECT入れ子になっているようにネストUPDATEを持つことが可能です。..複数の行を処理する方法がわかりませんか?

答えて

1

あなたは1つのコマンドで複数のテーブルを更新することができます。

UPDATE parent_table p LEFT JOIN child_table c On p.id = c.id 
SET 
    p.FIELD1 = 'XXX', 
    p.FIELD2 = 'YYY', 
    c.FIELD3 = '' 
WHERE p.ID = 2; 

しかし、私はあなたがアップデートをプリフォームと同じコマンドで削除することができますとは思わない - しかし、私はそれについてはよく分からない認めなければなりません。

あなたが複数のテーブルについての詳細を読むことができますがhere

を更新異なる(そして好ましい)のアプローチは、更新時にchild_tableから関連レコードを削除しますPARENT_TABLEにトリガーを作成することになります。当然の

+0

、問題がある:どのように私は、結合テーブルに複数の行を更新していますか?たとえCASE文が許可されていても(idk)、テーブル内のエントリ数と更新したい番号との間にどのような不一致があるのでしょうか?たとえば、..ここにID = 2の2つのエントリがありますが、別のエントリを挿入したい場合はどうすればいいでしょうか? ..たぶんUPDATEはできません。 – Valentino

+0

「別の」を入れると、例えばID2とID3の両方を変更しますか? – alfasin

+0

いいえ、 'FIELD3'が' 5,40,15 "に設定された文字列だった場合、' '3,5,7,8,15,7" 'に更新する必要があるかもしれません。 'child_table'の行数が変わることがあります。その場合は – Valentino

関連する問題