【问题标题】:SQL view selecting from multiple tables single sourceSQL 视图从多个表中选择单一来源
【发布时间】:2014-11-21 10:07:08
【问题描述】:

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

我的问题是这样的

我有一个表,它引用了不同表中的多个项目。是这样设置的

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

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 中的视图执行此操作时,它没有返回任何结果,我猜联接是不正确的,我承认我对联接不是很好..

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

谢谢!

【问题讨论】:

    标签: sql join view


    【解决方案1】:

    您可以使用 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 = ?
    

    【讨论】:

      【解决方案2】:

      使用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
      

      【讨论】:

        猜你喜欢
        • 2013-04-12
        • 1970-01-01
        • 2020-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        • 2014-06-19
        相关资源
        最近更新 更多