SQL查询获取常用记录

Posted

技术标签:

【中文标题】SQL查询获取常用记录【英文标题】:SQL Query to get common records 【发布时间】:2014-01-12 17:02:51 【问题描述】:

我有一张如下表

ID  Username GroupID
1   venkat     2
2   venkat     3
3   ramu       1
4   ramu       2

使用 sql 语句,我想检索 groupid 2,3 中可用的所有用户名

在这种情况下,只有 Venkat 是 groupid 2 和 3 中可用的用户名

请帮帮我

【问题讨论】:

【参考方案1】:

试试这个:

SELECT userName
FROM tableA 
WHERE groupId IN (2, 3)
GROUP BY userName 
HAVING COUNT(DISTINCT groupId) = 2;

查看SQL FIDDLE DEMO

输出

| USERNAME |
|----------|
|   venkat |

【讨论】:

如果同一组 id 的用户出现两次(例如,组 id 2 的用户 Pat 出现两次)怎么办 - 猜猜现在的查询不会工作 @Scorpion 它会起作用,因为我已经为每个用户计算了 DISTINCT groupId @AmitAgrawal 检查我的小提琴演示。查询将起作用 在示例数据中,用户 venkat 仅重复了两次,但仅当用户同时出现在两个组中时我们才需要,我们不能将查询限制为 HAVING COUNT(DISTINCT groupId) = 2,因为我们不知道它是 2 还是 3 或其他数字 @BillStidham 由于两个组有 2 个单独的行,AND 不会这样做,因为它仅在单行包含两个 groupid 时才匹配。【参考方案2】:

使用普通 JOIN 的替代方法;

SELECT DISTINCT t1.username 
FROM MyTable t1 JOIN MyTable t2
  ON t1.username = t2.username AND t1.groupid=2 AND t2.groupid=3;

An SQLfiddle to test with.

【讨论】:

这是一种更清洁、更好的方法 +1 如果我有多个 groupid 像 1,2,3,4,5..10 .. 你能帮我提供一个更灵活的查询吗 @Tarak 为此,您必须多次使用自加入表。表示如果您有 5 个组,则您加入表的次数超过 5 次。

以上是关于SQL查询获取常用记录的主要内容,如果未能解决你的问题,请参考以下文章

sql查询获取已删除记录

使用sql查询获取最新发布记录

sql语句中嵌套时候用in 和=有啥区别

数据库常用SQL语句

sql查询获取每个id的最新记录

SQL 查询以获取该用户的最新记录