如何选择一个子查询字段,返回多于1个值?

时间:2016-10-11 14:35:07

标签: sql sql-server database

我有两个表:User表和[user_friend]表。在[user_friend]表中,您可以看到哪个用户是某个用户的朋友。

用户表如下所示:

 [User_ID], [Username], [Password]
      1       Mikeyy1     666je
      2       misterG     8kdkd  

friends-table看起来像这样:(其中Friend_ID具有User中User_ID的外键)

[User_ID] [Friend_ID]
   1           3
   1           6

我想查询以下内容:用他们朋友的名字显示所有用户名。

到目前为止,我有这个:

SELECT u.Username, f2.Friend_ID
FROM [User] u JOIN [user_friend] f2
ON u.User_ID = f2.User_ID

返回所有用户的用户名和朋友的friend_ID,但我也想要他们的名字,所以我想这个:

SELECT u1.Username, f2.Friend_ID, (SELECT u.Username FROM [User] u 
JOIN [user_friend] f ON u.User_ID = f.friend_ID) AS "Friend"
FROM [User] u1 JOIN [user_friend] f2
ON u1.User_ID = f2.User_ID

但是这会给出子查询返回的值超过1的错误,我该如何解决?

提前谢谢你!

2 个答案:

答案 0 :(得分:2)

您需要添加另一个JOIN

SELECT
    u.Username,
    u2.Username
FROM [User] u
INNER JOIN [User_Friend] uf
    ON uf.User_ID = u.User_ID
INNER JOIN [User] u2
    ON u2.User_ID = uf.Friend_ID

答案 1 :(得分:2)

@Felix Pamittan是解决它的常用方法。但为了完整起见,您的原始查询应为

SELECT u1.Username, 
       f2.Friend_ID, 
       (SELECT u2.Username 
        FROM [User] u2 
        WHERE u2.User_ID = uf.friend_ID) AS "Friend"
FROM [User] u1 
JOIN [user_friend] uf
  ON u1.User_ID = uf.User_ID