0

私はSQLの初心者です。

今、少し複雑なselectを作成しようとしていますが、エラーが発生します。これは初心者の間違いだと思います。

助けていただければ幸いです。

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

アレックスとマイクは友達なので、この結果が欲しいです。

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と、実際には 行番号 対 a になりRANKます。ランキング (同点の可能性あり) が必要な場合は、 に置き換えROW_NUMBERますRANK

于 2013-02-23T14:32:49.363 に答える