2012-02-15 103 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]

這是我需要使用該程序的數據,但問題是每個用戶都可以擁有多個朋友,這意味着如果有的話會有多個朋友值。這就是爲什麼我不能使用這些值進行分組的原因,因爲它給我的發行人帶來了錯誤的價值。

預期輸出:

aspnet_Users.UserId(這是朋友的用戶ID,請注意,這並不意味着它的FriendUserId)

aspnet_Users.UserName(這是基於上面解釋的UserId的朋友的用戶名)

Friends.Verified(對或錯)驗證值在友誼友表)

Friends.FriendUserId(從表友FriendUserId值)

+0

我不明白_why_要組只有用戶ID。你能舉出一個你想要的結果的例子嗎? – 2012-02-15 08:33:10

+0

查看編輯問題 – parek 2012-02-15 08:39:12

+0

我明白,如果你通過aspnet_Users.UserId進行分組,它也將通過aspnet_Users.UserName進行分組。但是,如果不存在聚合函數,則無法分組。我想你想用命令。然而,預期的輸出作爲例子將有所幫助 – 2012-02-15 08:40:59

回答

1

如果你們的關係是沒有在表中友完全互惠的,您可以使用此查詢。

否則UNION的任一部分將在自己的工作

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 2012-02-15 10:28:10

-1

您可以使用DISTINCT

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

這與所有列上的分組相同。 – 2012-02-15 08:32:23

+0

正如Andreas所說,這就像所有列上的分組一樣,所以這並沒有解決我的問題。 – parek 2012-02-15 08:34:28

1

你需要組?您沒有使用任何聚集函數(如求和,計數)

你還沒有明確什麼樣的結果你要找的 - 我猜與給定用戶連接的用戶的所有細節,包括用戶他們自己?

當然你可以這樣做:

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 2012-02-15 09:10:16

+1

所以你可以給一些輸入數據的例子,你想要什麼返回? – kaj 2012-02-15 09:17:05

+0

我的意思是說,喬是擁有該用戶名的用戶。如果他是比爾和莎莉的朋友,是否應該返回兩條記錄?在你的數據庫中,你是否存儲相互關係,即你的朋友桌上會有Joe-Bill,Joe-Sally,Bill-Joe和Sally-Joe記錄? – kaj 2012-02-15 09:29:07