2012-06-08 43 views
1

的問題可能不準確描述我想要做什麼,但我有一個查詢返回下面的列動態加入一個基於表中的記錄值

ID名稱表名

存儲過程

Title正在返回NULL,因爲我需要能夠從Tablename列中引用的JOINED表中獲取它。在查詢中可能會返回幾個不同的Tablename值,並且每個記錄的標題都需要從Tablename字段中引用的表中獲取。

有沒有一種純SQL方式來做到這一點?

我想過創建一個臨時表,然後遍歷每條記錄並通過對Tablename中的表運行一個單獨的查詢來設置Title,但是我爲了更清晰的解決方案而跳槽。

謝謝

回答

2

這可能表示設計不直接適用於SQL。您的標題信息存儲在多個表中的原因是什麼?它可以重新考慮到不是這樣嗎?

但是,如果表的列表是固定列表,則有解決方案;在一個視圖中使用UNION ALL,或CTE使用的在線視圖,讓你的很多表看起來像一個表...

WITH 
    inlineView 
AS 
(
       SELECT 'table1' AS tableName, x, y, z, title FROM table1 
    UNION ALL SELECT 'table2' AS tableName, x, y, z, title FROM table2 
    UNION ALL SELECT 'table3' AS tableName, x, y, z, title FROM table3 
) 
SELECT 
    * 
FROM 
    aTable 
INNER JOIN 
    inlineView 
    ON aTable.tableName = inlineView.tableName 
    AND aTable.x   = inlineView.x 

如果你不能使它適合的是,或者表的數量你需要在視圖中包含不固定的,你可能需要一個循環和一些動態的SQL。同樣,這是一個強有力的指示器,表明模式並不真正適合SQL。

+0

現貨。謝謝 –

相關問題