0

我是 SQL 的初学者。

现在我正在尝试创建一个有点复杂的选择,但我遇到了一些错误,我知道这是一个初学者的错误。

任何帮助表示赞赏。

SELECT ROW_NUMBER() OVER (ORDER BY score) AS rank, userID, facebookID, name, score FROM (
    SELECT * FROM Friends  AS FR WHERE userID = ? 
    JOIN 
    Users WHERE Users.facebookID = FR.facebookFriendID
) 
UNION (
    SELECT * FROM User WHERE userID = ?
)

2在哪里?将替换为我的用户 ID。

表 User 包含我数据库中的每个用户,而 Friends 表包含用户的所有 facebookFriends。

USER TABLE
userID | facebookID | name | score

FRIENDS TABLE 
userID | facebookFriendID

样本数据

用户

A | facebookID1 | Alex | 100
B | facebookID2 | Mike | 200

朋友们

A | facebookID2 
A | facebookID3
B | facebookID1

我想要这个结果,因为 Alex 和 Mike 是朋友:

rank | userID | facebookID  | name
1    | B      | facebookID2 | Mike
2    | A      | facebookID1 | Alex

我希望这是非常清楚的解释。

我目前收到此错误:

执行查询时出错:关键字“AS”附近的语法不正确。

4

1 回答 1

1

您的查询有几个问题。 JOINS出现在WHERE从句之前。当使用 a 时JOIN,您需要指定您的ON子句。此外,在使用 UNION 时,您需要确保在两个查询中返回相同数量的字段。

试试这个:

SELECT ROW_NUMBER() OVER (ORDER BY score) AS rank, userID, facebookID, name, score 
FROM ( 
    SELECT * 
    FROM Users
    WHERE UserId = 'A'
    UNION 
    SELECT U.userId, u.facebookId, u.name, u.score 
    FROM Friends FR 
        JOIN Users U ON U.facebookID = FR.facebookFriendID 
    WHERE FR.userID = 'A' ) t

SQL 小提琴演示

此外,顺便说一句ROW_NUMBER,它实际上是一个 Row Number 与一个RANK. 如果您想要排名(有潜在联系),请替换ROW_NUMBERRANK.

于 2013-02-23T14:32:49.363 回答