sql - 仅选择与其他行相同的值

标签 sql sql-server

我不知道如何准确命名这个主题,所以我会尝试解释它。我在 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: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
    )

关于sql - 仅选择与其他行相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20856344/

相关文章:

android - 如何在 SQLite 中更新 2000 行时最小化时间要求

sql - 如何提高按特定时间间隔计算记录的查询的性能?

mysql - 子查询的 group by 计数与 group by 列上的不同计数之间的差异

SQL - 使用左连接进行分组

sql - 简短的 SQL 插入语句?

sql - 在 T-SQL 中旋转两列

sql - 展平规范化的 SQL Server 2008 R2 数据库

SQL WHERE 取决于星期几

sql - 范围身份与当前身份

ASP.NET Core - 应用程序在发布后未连接到数据库