2012-09-20 27 views
2

我如何加入或更多的表如下mysql?結合3個或更多的表,故意沒有加入條件

  • 存在用於(除了ID)
  • ID字段值的所有的每個表的每列中的列進入相同的ID字段在新表
  • 一個附加列被添加稱爲table值這是源表名
  • 包含自動增量newID字段被添加
  • 只有一個表有助於每一行,不相關的領域具有空值
  • 行的總數從所有表

例如等於總和的記錄只有兩個表:

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 

我知道這可能聽起來有點不可思議!我將試着用這個batch-insert腳本批量插入各種表中記錄的節點到neojs圖形數據庫中。考慮到我幾乎不知道我在這兩個數據庫中做了什麼,這可能會很搞笑;-)。

回答

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 Demo

  • 創建新表

這裏的建議架構

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 
1
  1. 創建自動遞增的表NEWID
  2. 添加所有可能的列允許空值。
  3. INSERT INTO從表A中的值,那麼表B的東西,如:

 

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

INSERT INTO table 
(ID, `table`, fieldB) 
SELECT ID, 'TableB', fieldB FROM TableB 
+0

感謝您的編輯:) –

0

使用UNION來選擇一個結果集,INSERT INTO所有行插入到新表。 您也可以在SQL Server中得到使用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