【发布时间】:2015-06-23 22:26:21
【问题描述】:
我有一个关于 MySQL 的视图,我想过滤掉那些 temID 为特定用户多次出现的行。
假设数据样本是:
id name ques temID
55 peter 1993 680
55 peter 1994 680
55 peter 1476 680
55 peter 1879 684
55 peter 1440 686
55 peter 1440 686
55 peter 1438 686
55 peter 1921 687
55 peter 1922 687
55 peter 1921 687
56 john 1853 684
56 john 1853 684
56 john 1539 687
56 john 1998 1512
56 john 2281 1534
56 john 2282 1534
56 john 2282 1534
我希望结果是
id name ques temID
55 peter 1993 680
55 peter 1994 680
55 peter 1476 680
55 peter 1440 686
55 peter 1440 686
55 peter 1438 686
55 peter 1921 687
55 peter 1922 687
55 peter 1921 687
56 john 1853 684
56 john 1853 684
56 john 2281 1534
56 john 2282 1534
56 john 2282 1534
应该删除这三行,因为每个用户的 temID 只出现一次:
id name ques temID
55 peter 1879 684
56 john 1539 687
56 john 1998 1512
我试过了
select * from v_tem
WHERE temID IN
( SELECT temID
FROM v_tem
GROUP BY id, temID
HAVING COUNT(*) > 1
)
GROUP BY id, temID
ORDER BY id, temID;
但结果是
id name ques temID
55 peter 1993 680
55 peter 1994 680
55 peter 1476 680
55 peter 1879 684
55 peter 1440 686
55 peter 1440 686
55 peter 1438 686
55 peter 1921 687
55 peter 1922 687
55 peter 1921 687
56 john 1853 684
56 john 1853 684
56 john 1539 687
56 john 2281 1534
56 john 2282 1534
56 john 2282 1534
只有
id name ques temID
56 john 1998 1512
已删除。
我的猜测是,因为 temID 684 不止一次出现在 john 中,所以它通过了 where 子句,即使它只出现了一次 peter。 temID 687 也是如此。即使它只为 john 出现一次,因为它为 peter 出现了两次,它也不会被 where 子句省略。
请帮忙!
【问题讨论】:
-
我知道 MySQL 以自己的方式处理事情,但一般的 GROUP BY 规则是:“如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须标识一个分组列或者是集合函数的参数。”
标签: mysql sql select count where