2014-11-21 74 views
0

所以我一直在尋找所有這個問題的答案,但我似乎無法找到一個,所以如果有一個我很抱歉的重複帖子。SQL視圖從多個表中選擇單一來源

我的問題是這樣的

我有refrences在不同的充表的多個項目的表。這是設置這樣的

這是主要的參考表(包含所有項目的一個參考點)

ID:key 
itemID:item refrenced 

然後我有事情的另一表像

Speakers 
Sessions 
Sponsors 

這些表是參考表將指向的內容。我想返回的是一個簡單的子集,這意味着參考表'itemID'字段將映射到其他表的itemID字段。

我想要發生的是任何找到的項目都會顯示在結果中,這意味着它將在所有3個表格中查找匹配並顯示數據的itemID。

因此,例如

在引用表可能有

ID:1 , itemID: 1111 
ID:2 , itemID: 2222 
ID:3 , itemID: 3333 
ID:4 , itemID: 4444 
ID:5 , itemID: 5555 

因此,我們必須在我們的參考表5名的項目,我想所有三個表中查找匹配上的itemid

Speakers 
Sessions 
Sponsors 

如果有匹配它應該從表中返回

itemsID, Title 

當我嘗試從SQL視圖返回任何結果的做到這一點,我猜的加入是不正確的,我承認我不是非常好,加入..

無論如何,我希望這有點讓感覺和任何你可以提供給我的信息將不勝感激。

謝謝!

回答

0

您可以創建一個UNION子句的視圖(假設的itemId是唯一跨越所有表)

SELECT ref_table.ID, ref_table.ItemId, speakers.title 
FROM ref_table, speakers 
WHERE ref_table.itemId = speakers.ItemId 
UNION 
SELECT ref_table.ID, ref_table.ItemId, sessions.title 
FROM ref_table, sessions 
WHERE ref_table.itemId = sessions.ItemId 
... 

現在使用id查詢表,你做

SELECT * FROM my_view WHERE id = ? 
0

使用UNION然後加入參考表

Select R.itemId, T.title 
From 
(
    Select itemid, title ,'speakers' as type 
    from speakers 
    UNION 
    Select itemid, title ,'sessions' as type 
    from sessions 
) T 
Join refTable R 
On R.itemid = T.itemId