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查询获取常用记录的主要内容,如果未能解决你的问题,请参考以下文章