选择不带Group By Sql

时间:2012-02-15 08:26:09

标签: sql sql-server

我遇到了一些问题,我需要所有选择器,但我只想组aspnet_Users.Userid我应该怎么做?

这是我的问题:

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值。这就是为什么我不能使用这些值进行分组的原因,因为它给了我带有错误值的dublicates。

预期输出:

aspnet_Users.UserId (这是朋友的用户ID,请注意,这并不意味着它的FriendUserId)

aspnet_Users.UserName (这是基于上面解释的UserId的朋友的UserName)

Friends.Verified (对或错。友情表中的已验证值)

Friends.FriendUserId (朋友表中的FriendUserId值)

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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'

答案 2 :(得分:-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')