2012-02-15 12 views
0

私はこのクエリでいくつかの問題があります私はすべてのセレクタが必要ですが、グループ化したいだけですaspnet_Users.Useridどうすればいいですか?ここグループなしで選択Sql

は私のクエリである:

SELECT 
    aspnet_Users.UserId, aspnet_Users.UserName, 
    Friends.Verified, Friends.FriendUserId 
FROM 
    [aspnet_Users] 
INNER JOIN 
    Friends ON Friends.UserId = aspnet_Users.UserId OR Friends.FriendUserId = aspnet_Users.UserId 
WHERE 
    aspnet_Users.UserId IN 
     (SELECT UserId as Id FROM Friends 
     WHERE FriendUserId='3d1224ac-f2ad-45d4-aa84-a98e748e3e57' 
     UNION 
     SELECT FriendUserId as Id FROM Friends 
     WHERE UserId='3d1224ac-f2ad-45d4-aa84-a98e748e3e57') 
GROUP BY 
    aspnet_Users.UserId, aspnet_Users.UserName, 
    Friends.Verified, Friends.FriendUserId 

ストアドプロシージャ構造:

[aspnet_Users]と[友だち]

[aspnet_Users.UserId]、[ aspnet_Users.UserName]、[Friends.Verified]、[Friends.FriendUserId]

それは私が手続きを使用して取得する必要があるデータですが、問題は各ユーザーが複数の友達を持つことができ、その場合は複数のFriendsの値があることを意味します。これが私がそれらの値を使ってグループ化することができない理由で、私に間違った価値を持つ公益団体を与えるからです。

予想される出力:

aspnet_Users.UserId(これは友人のユーザIDである、それはそのFriendUserIdことを意味するわけではないことに注意してください)

aspnet_Users.UserName(これは上記で説明したUserIdに基づく友人のUserNameです)

Friends.Verified(真または偽)。検証済みの値友情の友人テーブル)テーブル友達から

Friends.FriendUserId(FriendUserId値)に

+0

独自に働くだろう。あなたは希望の結果の例を示してください。 –

+0

編集した質問を確認する – parek

+0

aspnet_Users.UserIdでグループ化すると、aspnet_Users.UserNameでもグループ化されます。ただし、集計関数がない場合はグループ化できません。私はあなたが注文を使用したいと思う。しかし、期待される出力が例として役立ちます。 –

答えて

1

きっとあなただけのような何かを行うことができます。

そうでなければUNIONのいずれかの部分は、私はあなただけのユーザーIDでグループ化したい_why_理解していない

SELECT U.UserId, U.UserName, F.Verified, F.FriendUserId 
FROM Friends F 
JOIN aspnet_Users U ON U.UserId=F.UserId 
WHERE F.FriendUserId='3d1224ac-f2ad-45d4-aa84-a98e748e3e57' 
UNION 
SELECT U.UserId, U.UserName, F.Verified, F.FriendUserId 
FROM Friends F 
JOIN aspnet_Users U ON U.UserId=F.FriendUserId 
WHERE F.UserId='3d1224ac-f2ad-45d4-aa84-a98e748e3e57' 
+0

チャームのように働いた!ありがとう。 – parek

-1

は、あなたがグループに必要です

SELECT DISTINCT 
    aspnet_Users.UserId, aspnet_Users.UserName, 
    Friends.Verified, Friends.FriendUserId 
FROM 
    [aspnet_Users] 
INNER JOIN 
    Friends ON Friends.UserId = aspnet_Users.UserId OR Friends.FriendUserId = aspnet_Users.UserId 
WHERE 
    aspnet_Users.UserId IN 
     (SELECT UserId as Id FROM Friends 
     WHERE FriendUserId='3d1224ac-f2ad-45d4-aa84-a98e748e3e57' 
     UNION 
     SELECT FriendUserId as Id FROM Friends 
     WHERE UserId='3d1224ac-f2ad-45d4-aa84-a98e748e3e57') 
+0

これは、すべての列のグループ化と同じです。 –

+0

Andreasはこれがすべての列をグループ化するようだと言っているように、これは私の問題を解決しませんでした。 – parek

1

DISTINCT使用することができますか?

あなたが探している結果を明確にしていない - ユーザーを含めて、特定のユーザーに接続しているユーザーのすべての詳細を推測している自分?あなたの関係は、テーブルの友人に完全に相互的でない場合は、このクエリを使用することができます

Select a.userid, a.username, f.verified, f.userid 
From aspnet_users a 
    Full outer join friends f on f.frienduserid = a.userid 
Where a.userid = @userid or f.frienduserid = @userid 
+0

問題は、私は重複を取得することです:../ – parek

+1

入力データのいくつかの例を与えることができますし、返されますか? – kaj

+0

私が言っていることは、ジョーがそのユーザーIDを持っているユーザーだと言うことです。彼がBillとSallyの友達であれば、2つのレコードが返されますか?あなたのデータベースでは、お互いの関係を保存していますか?つまり、Joe-Bill、Joe-Sally、Bill-Joe、Sally-Joeレコードがあなたの友達テーブルにありますか? – kaj

関連する問題