如何从多个表的多行创建视图?
Posted
技术标签:
【中文标题】如何从多个表的多行创建视图?【英文标题】:How can I create a View from multiple rows from multiple tables? 【发布时间】:2014-04-05 17:13:46 【问题描述】:我正在为聊天应用程序构建数据库,但在构建 View
以组合 Chats 表和 Users 表时遇到了麻烦。
Chats
表有字段sender_id
、receiver_id
映射到Users
表中的user_id
字段。现在,我想创建一个View
,它将Chats
与Users
表结合起来,并提供发送者和接收者的个人资料图片(在字段sender_pic
和receiver_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
【讨论】:
以上是关于如何从多个表的多行创建视图?的主要内容,如果未能解决你的问题,请参考以下文章