2011-10-20 35 views
1

我有我的表:稱它爲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它看起來像我需要加入表上...本身。我真的不明白這是什麼成就。

如果有人對此有所瞭解,很感激。我將繼續研究它,並用我遇到的任何其他信息更新此主題。

感謝

回答

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

謝謝喬,那工作。我會盡可能標記爲已接受的答案。感謝幫助。 – Snaxib

1

如果要選擇表中的所有列,你將不得不在使用@喬的查詢子選擇:

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

此查詢首先選擇所有的id少於3個副本。
獨特消除重複項,查詢不起作用,但稍慢。

接下來,它選擇所有具有符合子選擇標準的id的行,即具有少於3個重複ID的所有行。

的原因,你不能一氣呵成做到這一點的是,group by堆的所有行具有相同id連成一片super-row(美好metafor的匱乏)
無法分離出不在group by子句中的列。

外部選擇解決此問題。