如何根据表中显示的行数选择行?

时间:2011-10-20 15:49:01

标签: mysql sql count

我有我的表:称之为tblA这个表有三行,idsub-idvisibility

sub-id是主键(它定义了id的分类法)。我正在尝试构建一个查询,选择每次出现少于三次的id

这是一个示例查询/结果

select * from tbla where id = 188002;

+--------+--------+-------------+
| sub-id |  id    | visibility  |
+--------+--------+-------------+
| 284922 | 188002 |      2      |
| 284923 | 188002 |      2      |
| 284924 | 188002 |      0      |
+--------+--------+-------------+

从我所看到的herehere看起来我需要加入表格......本身。我真的不明白这完成了什么。

如果有人对此有所了解,我们将不胜感激。我将继续研究它并使用我遇到的任何其他信息更新此主题。

由于

2 个答案:

答案 0 :(得分:5)

SELECT id
    FROM tbla
    GROUP BY id
    HAVING COUNT(*) < 3

答案 1 :(得分:1)

如果要从表中选择所有列,则必须在子选择中使用@ Joe的查询:

SELECT * FROM tbla a
WHERE a.id IN (SELECT DISTINCT b.id 
               FROM tbla b 
               GROUP BY b.id 
               HAVING COUNT(*) < 3)

此查询首先选择少于3个重复项的所有ID 不同的消除重复,查询工作相同没有,但稍慢。

接下来,它选择具有符合子选择条件的id的所有行,即具有少于3个重复ID的行。

无法一次完成此操作的原因是group by将具有相同ID的所有行合并为一个super-row (因为缺少。 您不能分离不在group by子句中的列。

外部选择解决了这个问题。