【问题标题】:How to join two tables, using specific columns multiple times如何多次使用特定列连接两个表
【发布时间】:2016-03-30 18:25:45
【问题描述】:

我有以下 2 个表:

A) 表格

关注

ID fk用户名 follow_fkUserName

用户资料

ID fk用户名 姓名 姓

B) 我要做什么

我想按照以下方式加入这两个表:

ID User_fkUserName 用户名 用户姓氏 Followed_fkUserName Followed_Name Followed_Surname

C) 我的问题:

我的问题是当我尝试通过视图加入时,我没有得到预期的结果。

我希望最终我会得到这样的结果:

Id User_fkUsername User_Name User_Surname Followed_fkUserName Followed_Name Followed_Surname 1 pbean Paul Bean mWhite 玛丽白

D) 我正在使用的代码:

以下是我用于加入的代码:

创建视图 [dbo].[vwFollowingUsers] 作为选择 援助, b.名称用户名, c.Surname User_Surname, d.Name Followed_Name, e.Surname Followed_Surname 从以下 左加入用户配置文件 b ON a.fkUserName = b.fkUserName LEFT JOIN UserProfile c ON a.fkUserName = c.fkUserName LEFT JOIN UserProfile d ON a.follow_fkUserName = d.fkUserName LEFT JOIN UserProfile e ON a.follow_fkUserName = e.fkUserName

E) 这就是我得到的:

vwFollowingUsers

Id User_Name Followed_Name 1 保罗·玛丽

我在关注这个question

F) 更新代码

在我在这里发布我的问题后,我已经更新了我的代码,如下所示:

创建视图 [dbo].[vwFollowingUsers] 作为选择 援助, B.fkUserName AS User_fkUserName, B.Name AS User_Name, B.Surname AS User_Surname, C.fkUserName AS Followed_fkUsername, C.Name AS Followed_Name, C.Surname AS Followed_Surname 从以下 A A.fkUserName = B.fkUserName 上的 INNER JOIN UserProfile B INNER JOIN UserProfile C ON A.follow_fkUserName = C.fkUserName;

G) 实际数据:

这是实际数据(根据要求)

关注

id fkUsername follow_fkUserName 2 nic@gmail.com steph@gmail.com

用户资料

Id UserPhoto 描述 fkUserName 姓名 姓氏 1 ../Files/nich.jpg 测试 nich@gmail.com Nich White 2 ../Files/nich2.jpg null nich2@gmail.com Nich2 White2 3 ../Files/steph.jpg null steph@gmail.com Stephania Borg

我正在使用 Visual Studio,我正在尝试创建一个视图,该视图将为我提供问题 G 部分中提到的结果。

【问题讨论】:

  • 为什么你有 4 个连接,而你可以用两个连接?
  • 我试图用两个......但我没有做到:/
  • 请提供样本数据和预期输出。并请清除 RDBMS(产品和版本)。目前这被标记为mysqlsql-server
  • @Shnugo 我提供了示例数据和预期输出。谢谢

标签: sql sql-server select join view


【解决方案1】:

您只需加入 UserProfile 2 次 1 即可为用户获取数据,另一次为关注者获取数据。

试试这个:

CREATE VIEW [dbo].[vwFollowingUsers]

    AS SELECT A.id, 
              B.fkUserName AS User_fkUserName, 
              B.Name AS User_Name, 
              B.Surname AS User_Surname, 
              C.fkUserName AS Followed_fkUserName, 
              C.Name AS Followed_Name,
              C.Surname AS Followed_Surname,
         FROM Following A 
         LEFT JOIN UserProfile B ON A.fkUserName = B.fkUserName 
         LEFT JOIN UserProfile C ON A.follow_fkUserName = C.fkUserName;

【讨论】:

  • 感谢您的回复...但是仅显示以下列:id、User_Name、Followed_Name
  • @Nichs 你能把你的数据和结构放在 sql fiddle 中并分享那个链接。这样我们就可以直接去那里查了
【解决方案2】:

这里不需要 4 个连接 - 您只需从 UserProfile 中提取 行。
您可以简单地执行以下操作:

SELECT   f.Id,
         up1.fkUserName User_fkUsername,
         up1.Name User_Name, 
         up1.Surname User_Surname, 
         up2.fkUserName Followed_fkUsername,
         up2.Name Followed_Name,
         up2.Surname Followed_Surname
FROM Following f
INNER JOIN UserProfile up1 ON f.fkUserName = up1.fkUserName
INNER JOIN UserProfile up2 ON f.fkUserName = up2.fkUserName

【讨论】:

    猜你喜欢
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多