假设我有一个MySQL表,其中包含以下条目:
1
2
3
2
5
6
7
6
6
8
当我做“SELECT * ...”时,我会收到所有条目。但我想只返回这些条目,这些条目在表格中只存在一次。表示值为2(存在两次)和6(存在三次)的行必须完全从我的结果中删除。
我找到了一个关键字DISTINCT,但据我所知它只避免条目显示两次,它不会完全过滤它们。
我认为可以用COUNT以某种方式完成,但我尝试的并不是真正成功。那么这里正确的SQL语句是什么?
编辑:澄清一下,我想要回来的结果是
1
3
5
7
8
答案 0 :(得分:6)
您可以将COUNT()
与GROUP BY
和HAVING
条款结合使用,如下所示:
SELECT yourCol
FROM yourTable
GROUP BY yourCol
HAVING COUNT(*) < 2
答案 1 :(得分:5)
您希望混合GROUP BY和COUNT()。
假设该列名为'id'且该表名为'table',则以下语句将起作用:
SELECT * FROM `table` GROUP BY id HAVING COUNT(id) = 1
这将完全过滤掉重复的结果(例如,它会取出你的2和6)
答案 2 :(得分:2)
三种方式。一个GROUP BY
和HAVING
:
SELECT columnX
FROM tableX
GROUP BY columnX
HAVING COUNT(*) = 1 ;
具有相关NOT EXISTS
子查询的一个:
SELECT columnX
FROM tableX AS t
WHERE NOT EXISTS
( SELECT *
FROM tableX AS t2
WHERE t2.columnX = t.columnX
AND t2.pk <> t.pk -- pk is the primary key of the table
) ;
并改进了第一种方式(如果您有pk
列的主键和(columnX, pk)
上的索引:
SELECT columnX
FROM tableX
GROUP BY columnX
HAVING MIN(pk) = MAX(pk) ;
答案 3 :(得分:1)
select id from foo group by id having count(*) < 2;