繁体   English   中英

SQL:将多个表连接成一个

[英]SQL: joining multiples tables into one

我有4张桌子。

r1,r2,r3和r4。 表列如下:

rId | rName

我希望有一个独特的表 - 让我们称之为R.显然,R将具有以下结构:

rTableName | rId | rName

我正在寻找一个解决方案,对我来说更自然的是:

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

虽然我确切地看到如何使用批处理,编辑等执行1和3 ...(我只需要一劳永逸地执行它),但我没有看到如何做到第2点:自我获取表名到插入SQL。

你有想法/或不同的方法可以解决我的问题吗?

注意:事实上,有250多个rX表。 这就是为什么我不能手动执行此操作。 注2:确切地说,这是MySQL。

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'))

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

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
...

这将是一个很大的'honkin'SQL语句,但您可以使用您选择的语言从快速程序循环生成文本。 您也可以将其分成几个表,一次50个表,或者只生成250个单独的INSERT语句。

您可以使用动态sql执行此操作,在while循环中构建字符串,然后执行该字符串。

或者你可以快速而又脏,并使用excel来连接sql字符串,然后只需从excel复制粘贴并运行这些字符串。

如果必须只进行一次,我将在excel / OO电子表格中设计一个公式,为所有250个表生成插入并完成它。

会这样的吗?

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

更新:看到您的更新后,此方法不可行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM