我有我的表:称之为tblA
这个表有三行,id
,sub-id
和visibility
sub-id
是主键(它定义了id
的分类法)。我正在尝试构建一个查询,选择每次出现少于三次的id
。
这是一个示例查询/结果
select * from tbla where id = 188002;
+--------+--------+-------------+
| sub-id | id | visibility |
+--------+--------+-------------+
| 284922 | 188002 | 2 |
| 284923 | 188002 | 2 |
| 284924 | 188002 | 0 |
+--------+--------+-------------+
从我所看到的here和here看起来我需要加入表格......本身。我真的不明白这完成了什么。
如果有人对此有所了解,我们将不胜感激。我将继续研究它并使用我遇到的任何其他信息更新此主题。
由于
答案 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子句中的列。
外部选择解决了这个问题。