2

同じ構造を持つ 13 個のテーブルがあります。

id  switch_name area

各テーブルには、特定のエリアの異なる switch_name が含まれています。例えば、

table1:
id    switch_name area
56    xxxx        A
77    yyyy        A
table2:
id    switch_name area
89    zzzz        B
78    uuuu        B

これらのテーブルを使用して、ID を含む別のテーブル「結果」を更新し、面積の値が入力されるのを待つ必要があります。

したがって、次のコマンドを実行します。

UPDATE results JOIN table1 ON results.switch_id = table1.id SET results.area = table1.area

これは 1 つのテーブルでは問題なく機能しますが、これら 13 個のテーブルすべてを結合したいと考えています。たとえば、そのうちの 2 つを取り上げてみましょう。次のようにクエリを記述できますか。

 UPDATE results JOIN table1 ON results.switch_id = table1.id JOIN table2 ON results.switch_id = table2.id SET results.area = table1.area, results.area = table2.area

また

UPDATE results JOIN table1 ON results.switch_id = table1.id SET results.area = table1.area JOIN table2 ON results.switch_id = table2.id SET results.area = table2.area

どうもありがとう

4

1 に答える 1

2

すべてのtableNテーブルの構造が同じで内容が異なる場合、UNION ALLそれらはすべてサブクエリにまとめられ、それに対して結合されます。

UPDATE 
  results
  JOIN (
    SELECT id, switch_name, area FROM table1
    UNION ALL 
    SELECT id, switch_name, area FROM table2
    UNION ALL
    ..
    ..
    SELECT id, switch_name, area FROM table13
  ) alltogether ON results.switch_id = alltogether.id
SET results.area = alltogether.area
WHERE <conditions for update>

長期的には、これらのテーブルがすべて類似しているが、同じデータセットの異なるサブセットを保持している場合、ソースを区別する列を持つ1 つのテーブルに結合する必要があります。

次のようなものを使用して、それらを単一のテーブルにマージします。

INSERT INTO new_combined_table 
  (id, switch_name, area, source)
  SELECT id, switch_name, area, 't1' AS source FROM table1
  UNION ALL
  SELECT id, switch_name, area, 't2' AS source FROM table2
  UNION ALL
  SELECT id, switch_name, area, 't3' AS source FROM table3
  ..
  ..
  UNION ALL 
  SELECT id, switch_name, area, 't13' AS source FROM table13
于 2012-05-14T14:31:48.787 に答える