仅在MySQL数据库存在一次时才从MySQL数据库中选择一个值

时间:2013-01-06 09:52:09

标签: mysql sql select count

假设我有一个MySQL表,其中包含以下条目:

1
2
3
2
5
6
7
6
6
8

当我做“SELECT * ...”时,我会收到所有条目。但我想只返回这些条目,这些条目在表格中只存在一次。表示值为2(存在两次)和6(存在三次)的行必须完全从我的结果中删除。

我找到了一个关键字DISTINCT,但据我所知它只避免条目显示两次,它不会完全过滤它们。

我认为可以用COUNT以某种方式完成,但我尝试的并不是真正成功。那么这里正确的SQL语句是什么?

编辑:澄清一下,我想要回来的结果是

1
3
5
7
8

4 个答案:

答案 0 :(得分:6)

您可以将COUNT()GROUP BYHAVING条款结合使用,如下所示:

SELECT yourCol
FROM yourTable
GROUP BY yourCol
HAVING COUNT(*) < 2

Example fiddle.

答案 1 :(得分:5)

您希望混合GROUP BY和COUNT()。

假设该列名为'id'且该表名为'table',则以下语句将起作用:

SELECT * FROM `table` GROUP BY id HAVING COUNT(id) = 1

这将完全过滤掉重复的结果(例如,它会取出你的2和6)

答案 2 :(得分:2)

三种方式。一个GROUP BYHAVING

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;