2012-11-23 15 views
0

我有一個表Table1如何加入一個表,當被連接表是一個變量列

表包含樣柱:

  • sourceID(的加盟ID
  • sourceTable(該表是連接表,這是變量)

我的查詢:

SELECT T.Category, J.Tariff 
FROM Table1 as T 
INNER JOIN T.SourceTable J ---- This needs to be changed 
ON T.sourceID = J.id 

這是可能性è?

基本上每個行的源表可以不同

+0

參考:[Check this out](http://www.sommarskog.se/dynamic_sql.html) – bonCodigo

+0

*** SQL ***只是*結構化查詢語言* - 許多數據庫系統使用的語言,但不是一個數據庫產品......這將是真正有用的知道什麼具體的**數據庫系統**(和哪個版本)您使用​​.... –

+0

你可以發佈一些示例數據和表結構?根據你的描述,似乎你對每個'id'都有一個單獨的表格,如果這樣的話,設計看起來很有缺陷。 – Taryn

回答

0

在SQL查詢中,表名不能是動態的。你必須找到一個不同的方式來做到這一點。
使用Stored Procedure和/或EXEC()。

0

我會說這通常是一個壞主意。即使可能,它基本上阻止了優化器做了很多事情(這會導致查詢速度變慢)。

我建議改變你的數據庫設計,使你想要做的事情更容易(想想有一個基表,你想加入的表有1對1映射),而不是試圖得到這個上班。

0

您可以使用聯合,並按列表指針篩選列。事情是這樣的:

SELECT T.Category, J.Tariff 
FROM Table1 as T 
INNER JOIN T.SourceTable1 J ON T.sourceID = J.id 
where T.sourceTable = '1' 
union 
SELECT T.Category, J.Tariff 
FROM Table1 as T 
INNER JOIN T.SourceTable2 J ON T.sourceID = J.id 
where T.sourceTable = '2' 
0

原則上有可能使用左連接,但只有當你有一個固定的查找表(否則,你需要動態生成SQL語句):

SELECT T.Category, coalesce(source1.tariff, source2.tariff) as tariff 
FROM Table1 as T 
LEFT OUTER JOIN T.source1 
    ON T.sourceID = source1.id and t.sourcetable = 'source1' 
LEFT OUTER JOIN T.source2 
    ON T.sourceID = source2.id and t.sourcetable = 'source2' 

但正如其他答案中提到的那樣,這通常表明您的數據庫設計存在缺陷。

0

嘗試這樣:

1)創建VIEW所有源表:

CREATE VIEW source_tables AS 
(SELECT 'table_1' as table_name, 
     id, 
     value 
FROM table_1 
UNION ALL 
SELECT 'table_2' as table_name, 
     id, 
     value 
FROM table_2 
UNION ALL 
.......... 
SELECT 'table_n' as table_name, 
     id, 
     value 
FROM table_n); 

2)使用VIEW擺脫源表中的值:

SELECT T.category, S.value 
FROM base_table as T 
JOIN source_tables S ON T.sourceID = S.id AND T.SourceTable = S.table_name 
相關問題