【问题标题】:Find Specific Rows查找特定行
【发布时间】:2010-05-25 15:53:55
【问题描述】:

我正在尝试构建一个相当具体的查询,以根据他们注册的主题查找一组 user_id。 不幸的是,无法重构表格,所以我必须使用我所拥有的。

具有 user_id 和 registration_id 的单个表 我需要找到所有注册 ID 为(4 或 5)而不是 1 的用户 ID

每一行都是一个 user_id/registration_id 组合。 我的 SQL 技能不是最好的,所以我真的很抓狂。任何帮助将不胜感激。

【问题讨论】:

  • 你的标准让我很困惑。如果注册id必须是4或5,你为什么要检查它是否不是一个?

标签: sql semantics


【解决方案1】:
SELECT  *
FROM    (
        SELECT  DISTINCT user_id
        FROM    registrations
        ) ro
WHERE   user_id IN 
        (
        SELECT  user_id
        FROM    registrations ri
        WHERE   ri.registration_id IN (4, 5)
        )
        AND user_id NOT IN
        (
        SELECT  user_id
        FROM    registrations ri
        WHERE   ri.registration_id = 1
        )

很可能,user_id, registration_id 是您表中的PRIMARY KEY。如果不是,则在 (user_id, registration_id) 上创建一个复合索引,以便快速工作。

【讨论】:

  • 这就是诀窍。毕竟我很亲近。错过了选择不同部分的布局
【解决方案2】:

可能不是最好的方法(我的 SQL 技能也不是最好的),但应该可以完成工作:

SELECT user_id
FROM table AS t
WHERE registration_id IN (4, 5)
    AND NOT EXISTS (SELECT user_id
                    FROM table
                    WHERE user_id = t.user_id
                        AND registration_id = 1);

【讨论】:

    【解决方案3】:

    另一种消除 user_id 重复的方法:

    SELECT  user_id
            FROM    registrations
            WHERE   registration_id IN (4, 5)
    except
    SELECT  user_id
            FROM    registrations
            WHERE   registration_id =1
    

    表格的一种用法:

    select user_id from registrations
    where registration_id <=5
    group by  user_id
    having MIN(registration_id)>1 and MAX(registration_id)>= 4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      • 2013-06-04
      • 2016-06-13
      相关资源
      最近更新 更多