如何从SQL查询中返回行,其中一个唯一ID满足不同行中的条件?

时间:2015-08-07 18:13:32

标签: sql sql-server

我有一个表users,在我的另一个表usersHaveSocialMediaFans中有一个外键。

usersHaveSocialMediaFans有列:

socialMediaId, userId, fanCount

我需要查找每个社交媒体的粉丝数量大于(或小于)特定金额的所有用户。管理员需要能够筛选出可能拥有至少6位Facebook粉丝和7位Twitter粉丝的所有用户。

当我在用户表中显示此信息时,这非常简单:

userId, ..., facebookFans, twitterFollowers, ...

---0--, ---, -----10-----, ------1000------, ...

然后,我可以SELECT userId from users WHERE facebookFans > # AND twitterFollowers > #;但是,现在我的每个用户的数据被分成多行,我不知道如何处理逻辑。我觉得必须有一个简单的答案,但我现在想不起来。

2 个答案:

答案 0 :(得分:2)

一种方法

SELECT U.userId, F.SocialMediaID, F.fanCount from users U 
LEFT JOIN usersHaveSocialMediaFans F
ON F.Userid = U.Userid
WHERE (F.SocialMediaID='Facebook' and Fancount>1000) 
And (F.SocialMediaID='Twitter' and Fancount>1000) 

另一种方法:

SELECT U.userId, F.fanCount "FacebookFan", t.fanCount "TwitterFan" from users U 
LEFT JOIN usersHaveSocialMediaFans F 
ON F.Userid = U.Userid and F.SocialMediaID= 'Facebook'
LEFT JOIN usersHaveSocialMediaFans T
ON T.Userid = U.Userid and T.SocialMediaID= 'Twitter'
WHERE F.FanCount > 1000 and T.FanCount > 1000

答案 1 :(得分:1)

您需要JOIN两次usersHaveSocialMediaFans表格。{p>例如,如果您想要拥有超过1,000名Facebook粉丝和超过10位Twitter粉丝的人,您可以执行以下操作:

Select  Distinct U.UserId
From    Users                       U
Join    usersHaveSocialMediaFans    F   On  F.UserId = U.UserId 
                                        And F.socialMediaId = <FacebookSocialMediaId>
Join    usersHaveSocialMediaFans    T   On  T.UserId = U.UserId
                                        And T.socialMediaId = <TwitterSocialMediaId>
Where   F.fanCount > 1000
And     T.fanCount > 10;

如果您有另一个存储每个平台的SocialMediaId名称的表格,那么您应该在JOIN处执行另一个SocialMediaId,而不是在每个平台的SocialMedia中进行硬编码。但我不知道你的架构,所以希望这会指引你朝着正确的方向发展。

如果假设您有另一个名为SocialMediaId的表格,其中包含每个平台的NameSelect Distinct U.UserId From Users U Join usersHaveSocialMediaFans F On F.UserId = U.UserId Join SocialMedia SF On SF.SocialMediaId = F.SocialMediaId And SF.Name = 'Facebook' Join usersHaveSocialMediaFans T On T.UserId = U.UserId Join SocialMedia ST On ST.SocialMediaId = T.SocialMediaId And ST.Name = 'Twitter' Where F.fanCount > 1000 And T.fanCount > 10; ,则可以执行以下操作:

build

希望这有帮助!