SQL:将多个表连接成一个

3

我有四个表。

r1、r2、r3和r4。这些表的列如下:

rId | rName

我希望最终得到一个唯一的表格,让我们称其为 R。显然,R 将具有以下结构:
rTableName | rId | rName

我正在寻找一种解决方案,对我来说最自然的方法是:

  1. 给所有rX添加一个单独的列
  2. 在处理的表名中插入此列
  3. 生成SQL并将它们连接在一起

虽然我知道如何通过批处理、编辑等方式执行1和3(只需执行一次即可),但我不知道如何执行第2步:自动获取表名并插入到SQL中。

您有什么想法/或者不同的方法可以解决我的问题吗?

注意:实际上有250多个rX表格。这就是为什么我无法手动完成。

注2:确切地说,这是使用MySQL。

5个回答

2
SELECT 'INSERT R (tTablename, rId, rName)
        SELECT ''' + t.TABLE_NAME + ''', rId, rName
        FROM ' + t.TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES t
WHERE TABLE_TYPE = 'BASE TABLE'
AND TABLE_NAME LIKE 'R[0-9]%'
AND 2 = (SELECT COUNT(*)
         FROM INFORMATION_SCHEMA.COLUMNS c
         WHERE c.TABLE_NAME = t.TABLE_NAME
         AND c.COLUMN_NAME IN ('rId', 'rName'))

1

这样的东西可行吗?

INSERT INTO rX (rTableName,rId,rName)
SELECT 'R1',rId, rName FROM r1

INSERT INTO rX (rTableName,rId,rName)
SELECT 'R2',rId, rName FROM r2

INSERT INTO rX (rTableName,rId,rName)
SELECT 'R3',rId, rName FROM r3

INSERT INTO rX (rTableName,rId,rName)
SELECT 'R4',rId, rName FROM r4

更新:看到你的更新后,这个方法不可行。


1

如果我理解你的问题正确,我会这样做:

INSERT INTO R
SELECT 'r1' AS rTablename, r1.rId, r1.rName FROM r1
UNION
SELECT 'r2' AS rTablename, r2.rId, r2.rName FROM r2
UNION
SELECT 'r3' AS rTablename, r3.rId, r3.rName FROM r3
UNION
...

这将是一个庞大的 SQL 语句,但你可以使用你选择的编程语言快速编写一个程序来循环生成文本。你也可以将其分成每次50个表的块,或仅生成250个单独的 INSERT 语句。


1

您可以使用动态SQL来实现此操作,通过在while循环中构建字符串,然后执行该字符串。

或者您可以快速且简单地使用Excel来连接SQL字符串,然后只需从Excel复制并运行这些字符串即可。


1
如果只需要做一次,我会在Excel/OO电子表格中设计一个公式,生成所有250个表的插入语句,然后就完成了。

谢谢,这个方案终于和字符串构建方案类似了,而且由于易于执行的方式,也非常有趣。 - Graveen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接