只选择与其他行相同的值

时间:2013-12-31 11:05:34

标签: sql sql-server

我不确切知道如何命名这个主题,所以我会尝试解释它。我在MS SQL数据库中有两个表 - Sports UsersSports 。在体育表中我有运动列表。在UsersSports表中,我将体育分配给用户 - 每个用户都可以有多项运动。

CREATE TABLE [dbo].[Sports](
[SportId] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL,
[Sport] [nvarchar](max) NOT NULL)

CREATE TABLE [dbo].[UsersSports](
    [UserSportId] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL,
    [SportId] [int] NOT NULL REFERENCES [Sports]([SportId]),
    [ProfileId] [int] NOT NULL REFERENCES [Profiles]([ProfileId]))

我想选择用户的运动,但只选择其他用户在 UsersSports 表中指定的运动。例如,我踢足球和篮球,其他用户打篮球和网球,所以命令应该只选择篮球,因为我们都打篮球。

我只能通过以下命令选择用户的运动:

SELECT Sports.SportId, Sport FROM Sports JOIN UsersSports ON Sports.SportId = UsersSports.SportId WHERE UsersSports.ProfileId = '1003'

那我怎么能做到这一点? 感谢

1 个答案:

答案 0 :(得分:4)

您可以使用SQL:EXIST条件。

以下是一个示例:

SELECT Sports.SportId, Sport
FROM   Sports
JOIN   UsersSports
ON     Sports.SportId = UsersSports.SportId
WHERE  UsersSports.ProfileId = '1003'
AND EXISTS
    (SELECT 1 
     FROM   UsersSports AS otherUser
     WHERE  otherUser.ProfileId != '1003'  
     AND    otherUser.SportID = Sports.SportId
    )