如何在mysql中加入 3 或更多表,如下所示?
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图数据库中。考虑到我几乎不知道我在两个数据库中做了什么,这可能很搞笑;-)。
答案 0 :(得分: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
<击> 撞击>
这是建议的架构
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)
INSERT INTO table
(ID, `table`, fieldA)
SELECT ID, 'TableA', fieldA FROM TableA
INSERT INTO table
(ID, `table`, fieldB)
SELECT ID, 'TableB', fieldB FROM TableB
答案 2 :(得分:0)
使用UNION选择一个结果集中的所有行,INSERT INTO用于插入新表。 您还可以使用sql server
中的ROW_NUMBER()获取新IDSELECT 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