2010-05-13 129 views
3

我有4個表。SQL:將多個表連接成一個

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

rId | rName 

我想有,精,獨特的表 - 我們稱之爲R.顯然,R將具有以下結構:

rTableName | rId | rName 

我尋找一個解決方案,而對我來說更自然的是:

  1. 一列添加到所有RX
  2. 插入此列的表名我正在處理
  3. 產生SQLS和它們串聯所有

雖然我只看到了如何執行1和3配料,編輯等...(我只有一勞永逸地執行它),我不看看如何做到這一點2:自我獲取表名以插入到SQL中。

你有想法/或不同的方式來解決我的問題嗎?

注:事實上,有250 + rX表。這就是爲什麼我不能手動執行此操作。注2:確切地說,這是與MySQL。

回答

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

謝謝。似乎只有在SQL中完成的好方法 – Graveen 2010-05-13 15:24:14

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 

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

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語句。

1

您可以使用動態sql,在while循環中構建一個字符串,然後執行該字符串。

或者您可以快速和骯髒,並使用Excel來做串聯的SQL字符串,然後從Excel複製粘貼並運行這些字符串。

+0

謝謝你,這是有趣的考慮,我同意。 – Graveen 2010-05-13 15:24:40

1

如果只需要完成一次,我會在excel/OO電子表格中設計一個公式,爲所有250個表生成插入,並完成它。

+0

謝謝,這終於類似於字符串構建解決方案,並且由於易於執行的方式,我也非常有趣地考慮。 – Graveen 2010-05-13 15:25:29