2

次のように mysql で3つ以上のテーブルを結合するにはどうすればよいですか?

  • 各テーブルの各列に列があります (ID を除く)
  • ID フィールドの値はすべて、新しいテーブルの同じ ID フィールドに入ります。
  • tableソーステーブル名である値と呼ばれる追加の列が追加されます
  • 自動インクリメントnewIDフィールドが追加されます
  • 1 つのテーブルのみが各行に寄与し、関連のないフィールドには null 値が含まれます
  • 行の総数は、すべてのテーブルの合計レコード数と同じです

2 つのテーブルのみの例:

TableA:                  TableB          
ID   |   fieldA          ID   |   fieldB 
-----------------       -----------------
  1  |   valueA1           1  |   valueB1
  2  |   valueA2           2  |   valueB2


ResultTable:
newID  | ID  |  table  | fieldA  |  fieldB
---------------------------------------------
   1   |  1  |  TableA | valueA1 |  
   2   |  2  |  TableA | valueA2 |  
   3   |  1  |  TableB |         |  valueB1
   4   |  2  |  TableB |         |  valueB2

私はこれがおそらく少し奇妙に聞こえることを知っています!. これを使用して、このバッチ挿入スクリプトを使用して、さまざまなテーブルのレコードのノードを neojs グラフ データベースにバッチ挿入します。どちらのデータベースでも自分が何をしているのかほとんどわからないことを考えると、これは面白いかもしれません ;-) .

4

3 に答える 3

3

これを試してみてください

SELECT  @rownum := @rownum + 1 AS NewID,
        a.*
FROM
    (
        SELECT  ID, fieldA, '' AS fieldB
        FROM    tableA
        UNION ALL
        SELECT  ID, '' AS fieldA, fieldB
        FROM    tableB
    ) a, (SELECT @rownum:=0) r

SQLFiddleデモ

  • 新しいテーブルを作成する

これが提案されたスキーマです

CREATE TABLE Newtable
(
    NewID INT AUTO_INCREMENT,
    ID INT NOT NULL,
    FieldA VARCHAR(30),
    FieldB Varchar(30),
    CONSTRAINT tb_pk PRIMARY KEY (NewID)
)
  • 次に、値を挿入します。

INSERT INTO...SELECTこれがステートメントを使用したクエリです

INSERT INTO NewTable (ID, fieldA, fieldB)
SELECT  ID, fieldA, NULL AS fieldB
FROM    tableA
UNION ALL
SELECT  ID, NULL AS fieldA, fieldB
FROM    tableB
于 2012-09-20T05:30:20.727 に答える
1
  1. 自動インクリメントnewIDを使用してテーブルを作成します
  2. nullを許可するすべての可能な列を追加します。
  3. TableAの値を挿入し、次にTableBを次のように挿入します。

 

INSERT INTO table
(ID, `table`, fieldA)
SELECT ID, 'TableA', fieldA FROM TableA

INSERT INTO table
(ID, `table`, fieldB)
SELECT ID, 'TableB', fieldB FROM TableB
于 2012-09-20T05:32:20.710 に答える
0

UNION を使用して 1 つの結果セット内のすべての行を選択し、INSERT INTO を使用して新しいテーブルに挿入します。また、SQLサーバーでROW_NUMBER()を使用して新しいIDを取得できます

SELECT ID, COL1, NULL, NULL FROM Table1
UNION
SELECT ID, NULL, COL2, NULL FROM Table2
UNION
SELECT ID, NULL, NULL, COL3 FROM Table3

上記の結果を一時テーブルに選択します。行番号を使用して新しい ID を更新する

SELECT ID, ... , ROW_NUMBER() OVER(ORDER BY ID) AS NewID FROM #TempTable
于 2012-09-20T05:39:42.197 に答える