如何从多个表的多行创建视图?

Posted

技术标签:

【中文标题】如何从多个表的多行创建视图?【英文标题】:How can I create a View from multiple rows from multiple tables? 【发布时间】:2014-04-05 17:13:46 【问题描述】:

我正在为聊天应用程序构建数据库,但在构建 View 以组合 Chats 表和 Users 表时遇到了麻烦。

Chats 表有字段sender_idreceiver_id 映射到Users 表中的user_id 字段。现在,我想创建一个View,它将ChatsUsers 表结合起来,并提供发送者和接收者的个人资料图片(在字段sender_picreceiver_pic 中)。这些可以从Users 表的profile_pic 字段中获取。

执行此操作的 SQL 语法是什么?

【问题讨论】:

【参考方案1】:

你的语法如下,因为你需要发送者和接收者,你需要加入用户表两次。

CREATE VIEW SomeFancyName
AS
    SELECT s.profile_pic AS sender_pic
           ,r.profile_pic AS receiver_pic
        FROM Chats c
        JOIN users s
            ON c.sender_id = s.user_id
        JOIN users r
            ON c.receiver_id = s.user_id

现在您可以从每个列中添加您需要的列

【讨论】:

【参考方案2】:

你必须使用别名:

SELECT
    s.profile_pic AS sender_pic,
    r.profile_pic AS receiver_pic
FROM
    Chats
INNER JOIN
    Users AS s      -- s will represent the sender
ON
    Chats.sender_id = s.user_id
INNER JOIN
    Users AS r      -- and r the receiver
ON
    Chats.receiver_id = r.user_id;

【讨论】:

【参考方案3】:

您需要JOIN Chats 表和Users 表。

由于您有 2 个连接到同一个表(一个用于接收者,一个用于发送者),您还需要使用表别名来区分它们:

SELECT Chats.sender_id, Sender.profile_pic as Sender_profile_pic, 
       Chats.receiver_id, Receiver.profile_pic as Receiver_profile_pic, ...
  FROM Chats
  JOIN Users Receiver ON Users.user_id = Chats.receiver_id
  JOIN Users Sender ON Users.user_id = Chats.sender_id

【讨论】:

以上是关于如何从多个表的多行创建视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Hibernate 创建视图?

创建具有多个表的视图?

如何创建具有多行多列的表格视图?

如何从多个视图创建摘要视图?

SQLite进阶-17.视图

Sharepoint Online / 365 - 从列表视图中删除多个附加列和显示条目的“查看条目”