2011-07-15 16 views
1

単一クエリを使用して複数のテーブルを更新するにはどうすればいいですか?一度に2つのテーブルを更新する必要があります。このクエリを試しましたが、更新に失敗しますmysqlの複数のテーブルを更新する方法

UPDATE contact,bill SET companyid =2 WHERE userid=1 AND companyid =20; 
+0

なぜ2つのテーブルを一度に更新する必要がありますか? 2つのクエリを実行できませんか? –

+0

テーブル構造を投稿してください。エラーが発生した場合は、同様に投稿してください... –

答えて

3

これは動作するはずです。

UPDATE contact INNER JOIN bill SET companyid =2 WHERE userid=1 AND companyid =20; 

それとも競合を防ぐために。(あなたのテーブルレイアウトのわからないが、HERESに目安)

UPDATE contact x INNER JOIN bill y SET x.companyid =2 WHERE x.userid=1 AND y.companyid =20; 
+0

この回答は右になる必要があります –

+1

これはおそらくエラーを発生させます(テストしていません)。 SET companyid = 2は、更新するテーブルを認識しません(ユーザーが更新しようとしているときに両方のテーブルにcompanyidがあると仮定します)。 – CristiC

+0

@Eddie私は確信していませんが、私はこれと同じようにオープンジョイントをすると、OPが持っている 'table1、table1'で同じことを表現できると思います。違いはありますか? –

0

あなたは同じ時間に更新することはできません。

UPDATE contact SET companyid=2 WHERE userid=1 AND companyid =20; 
UPDATE bill SET companyid=2 WHERE userid=1 AND companyid =20; 
+0

はいできます。 'Multiple-table syntax'を参照してください。http://dev.mysql.com/doc/refman/5.0/en/update.html –

+0

@Brendan:例を示してください。あなたの参照では、複数のテーブルが結合に使用されます。 – CristiC

+0

あなたは単にそれらを内部結合する必要があります。 – Eddie

2

あなたは「一度に2つのテーブルを更新する必要がある」理由は、変更が半分終わらないようにすることである場合は、トランザクション内でクエリをラップ検討する必要があります。

START TRANSACTION; 
UPDATE ... 
UPDATE ... 
COMMIT; 

(または、MySQLの構文は...)

関連する問題