【问题标题】:Select only same values as other row has仅选择与其他行相同的值
【发布时间】:2013-12-31 11:05:34
【问题描述】:

我不知道如何命名这个主题,所以我将尝试解释它。我在 MS SQL 数据库中有两个表 - SportsUsersSports。在运动表中,我有运动列表。在 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'

那么我该如何实现呢? 谢谢

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您可以使用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
        )
    

    【讨论】:

    • 行得通,谢谢你丰富了我的知识:-)。
    猜你喜欢
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多