1

構造が同一の 2 つのテーブルがあります。Table1モデレートされたデータをtable2保持し、まだモデレートされていないデータを保持します。

表1

+-----+----------+-----------------+--------+--- ------+----------+
| | "ID" | "名前" | "説明" | "タイプ" | "国" | "ステータス" |
+-----+----------+-----------------+--------+--- ------+----------+
| | "1" | 「タイトル1」 | "説明 1" | "1" | "米国" | "0" |
| | "2" | 「タイトル2」 | "説明 2" | "1" | "イギリス" | "0" |
+-----+----------+-----------------+--------+--- ------+----------+

表 2

    +-----+----------+-----------------+--------+--- ------+----------+
    | | "ID" | "名前" | "説明" | "タイプ" | "国" | "ステータス" |
    +-----+----------+-----------------+--------+--- ------+----------+
    | | "1" | 「タイトル1」 | "説明 1" | "1" | "米国" | "2" |
    | | "2" | 「タイトル2」 | "説明 2" | "1" | "イギリス" | "2" |
    +-----+----------+-----------------+--------+--- ------+----------+

status単一の SQL を使用して両方のテーブルの列を更新しようとしています。実際には、モデレーターはtable2、それが彼が使用できるテーブルであるため、更新のみを行います。

2table2つが更新さtable1れると、同時に更新できますか? 単一のSQLを使用していますか? 現在、これには2つの異なる従来のSQLステートメントを使用しています。

今、私はこのようにしています:

UPDATE table2 set status = 0 where id = spid and country = spcountry;//Update table2 first

        UPDATE table1 a
        INNER JOIN table2 b
        ON a.id = b.id and a.country = b.country
        SET a.status = b.status
        WHERE a.id=spid;

やりたいこと:例

$status = 0;//php

update table1, table2 set status = $status where id=1 and conuntry = 'us' in table1 and table2.//The id and country need to be the same in both tables.
4

4 に答える 4

2

次の構文で2つのテーブルを更新できますが、

UPDATE TBL1, TBL2
SET TBL1.status = 'Blah', TBL2.status = 'blah'
WHERE TBL1.id = TBL2.id 
      AND TBL2.id = 2;

しかし、これは有害である可能性があります。次のケースを考えてみましょう: TBL2 に id = 2 の行が含まれているのに対し、TBL1 には id = 2 の行が含まれていない場合。これにより、更新が失敗します。これが機能するためには、TBL1 と TBL2 がまったく同じでなければなりません。そして、それらの 2 つのテーブルがまったく同じである場合、なぜ最初から 2 つのテーブルがないのでしょうか?


@invisal 失敗した場合は、更新された行が 0 と表示されるだけですよね? スクリプトの実行が停止することはありません。– jmenezes

まず、これら 2 つのテーブルに同じデータがあることを確認する必要があります。

  • 挿入する場合は、2 つのテーブルに挿入する必要があります
  • どの更新でも、2 つのテーブルを更新する必要があります
  • 削除するには、2 つのテーブルから削除する必要があります

スクリプトの実行は停止しませんが、これらの条件を適用する必要があります。2 つのテーブルが一致していない場合、更新がうまくいかないことがあります。意図したとおりに動作しないスクリプトとエラーをスローするスクリプトに大きな違いはありません。二人ともやるべきことを怠っている。

于 2013-06-05T04:44:44.793 に答える
1

Transactions1 つのステートメントで 2 つのテーブルを更新するのではなく (面倒です)、クエリ/ストアド プロシージャで使用する方が簡単で安全な方法です。両方のテーブルを一度に確実に更新します。

START TRANSACTION;
UPDATE table1 SET summary=@A WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;

この助けを願っています!!

于 2013-06-05T04:49:41.577 に答える
0

トリガーをオンにして目標を達成できますtable2

CREATE TRIGGER tg_table2_update
AFTER UPDATE ON table2 
FOR EACH ROW
  UPDATE table1
     SET status = NEW.status
   WHERE id = NEW.id AND country = NEW.country;

これがSQLFiddle のデモです。

于 2013-06-05T04:33:24.580 に答える
0

これはおそらくそれを行うでしょうが、私はそれをテストしていません:

begin transaction t1;

UPDATE table2 
    set status = 0 
    where id = spid and country = spcountry;

UPDATE table1 a INNER JOIN table2 b ON a.id = b.id and a.country = b.country 
    SET a.status = b.status 
    WHERE a.id=spid;

commit transaction t1;
于 2013-06-05T04:46:07.827 に答える