0

同じ列構造を持つ動的な量のテーブルがあります。単一のクエリでそれらすべての特定の行を更新したいと考えています。私が見つけた複数テーブルの UPDATE の例は、異なるテーブルで異なる列を実行し、別のテーブルの値に基づいて 1 つのテーブルを更新することに関係しています。私の問題は、すべてのテーブルに同じ列があり、それが動的な数のテーブルであることです。

この例として、table_a、table_b、および table_c があります。3 つのテーブルはすべて同じ構造 (id と status) を共有します。

3 つすべてのステータス列を一度に既知の値に更新したいと考えています。

これは、この例で基本的に組み合わせたいクエリです。

UPDATE table_a SET status = 'closed' WHERE id = 5
UPDATE table_b SET status = 'closed' WHERE id = 5
UPDATE table_c SET status = 'closed' WHERE id = 5

テーブルの量は動的であるため、単一のクエリでこれが最もクリーンになると思います。PHP にテーブル名の配列があり (このシステムでは動的に読み込まれます)、それらを反復して結合を形成したり、必要に応じて文字列を連結したりできます。

これは私がうまくいくと思ったものの例です。

UPDATE table_a, table_b, table_c
SET status = 'closed'
WHERE id = 5

このクエリの問題は、列名のあいまいさに関するエラーが発生することです。

このようなものにする必要がありますか?

UPDATE table_a, table_b, table_c
SET table_a.status = 'closed', table_b.status = 'closed', table_c.status = 'closed
WHERE table_a.id = 5 OR table_b.id = 5 OR table_c.id = 5

予想されるテーブルの量は実際には1〜10の範囲であるため、これはうまくいくと思います。しかし、私はもっと効率的な方法を本当に望んでいました。個々のクエリを起動することは、クエリの数が少ない場合はそれほど悪くないかもしれませんが、大規模なシステムでは、あらゆる最適化が重要です!

助けてくれてありがとう。

同じスキームを持つ複数のテーブルを持つ構造は、複数の場所を分離する追跡システムであるため、設計によるものであることに注意してください。この例は、実装する必要があるアイデアの基本構造のみを反映しています。実物はもっと複雑です。また、ストアド プロシージャは、このプロジェクトのオプションではありません。

4

1 に答える 1

0

はい、同じ論理名を使用している場合は、更新する各テーブル/列を修飾する必要があります。

クエリでは、'status' の論理名を探していることがわかりますが、'status' をデータベース内の 3 つの異なる物理的な場所の論理名として定義しています。どちらのことですか?複数のテーブルが関係している場合にできることはたくさんあります。したがって、データベースがそれらすべてを更新する必要があると想定するのは非常に悪いことです。

于 2012-09-18T20:12:54.580 に答える