2014-11-21 70 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