SQL视图从多个表中选择单个源

时间:2014-11-21 00:41:40

标签: sql join view

所以我一直在寻找这个问题的答案,但我似乎找不到一个,所以如果有一个我很抱歉重复的帖子。

我遇到的问题是这个

我有一个表格,用于引用不同表格中的多个项目。设置就像这样

这是主参考表(包含所有要引用的项目的参考表)

ID:key
itemID:item refrenced

然后我有其他表格,如

Speakers
Sessions
Sponsors

这些表是refrence表所指向的。我想要回来的是一个简单的子集,这意味着refrence表'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中的视图执行此操作时,它不返回任何结果,我猜测连接是不正确的,我承认我对连接不是很好..

无论如何,我希望这有点有道理,你能提供给我的任何信息都将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分: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 = ?

答案 1 :(得分: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