我有4张桌子。
r1,r2,r3和r4。表格列如下:
rId | rName
我希望有一个独特的表 - 让我们称之为R.显然,R将具有以下结构:
rTableName | rId | rName
我正在寻找解决方案,对我来说更自然的是:
虽然我确实看到了如何使用批处理,编辑等执行1和3 ...(我只需要一劳永逸地执行),我看不出如何做到第2点:自我获取要插入SQL的表名。
你有想法/或者不同的方法可以解决我的问题吗?
注意:事实上,有250多个rX表。这就是为什么我不能手动执行此操作。 注2:确切地说,这是MySQL。
答案 0 :(得分: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 :(得分: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
...
这将是一个很大的'honkin'SQL语句,但您可以使用您选择的语言从快速程序循环生成文本。你也可以将它分成50个表,或者只生成250个单独的INSERT语句。
答案 2 :(得分:1)
您可以使用动态sql执行此操作,在while循环中构建字符串,然后执行该字符串。
或者你可以快速而又脏,并使用excel来连接sql字符串,然后只需从excel复制粘贴并运行这些字符串。
答案 3 :(得分:1)
如果必须只进行一次,我会在excel / OO电子表格中设计一个公式,为所有250个表生成插入并完成它。
答案 4 :(得分:0)
这样的事情会起作用吗?
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
更新:看到您的更新后,此方法不可行。