2014-03-19 162 views
1

我有一個mysql表,其中一個字段將保存重複項。我試圖選擇所有,但忽略在此字段中存在重複的所有行。選擇所有,但忽略重複項

因此,如果例如我總共有10行,其中3個重複我喜歡返回8行。這7個是唯一的,3個重複中的1個。

我已經嘗試了不同的和成功的組合。他們忽略所有3個副本。

這裏是我的嘗試:

SELECT * 
FROM directory_listings 
GROUP BY url 
WHERE status = 'approved' 
ORDER BY site_name ASC 
LIMIT $start, $per_page 

SELECT * DISTINCT url 
FROM directory_listings 
WHERE status = 'approved' 
ORDER BY site_name ASC 
LIMIT $start, $per_page 
+0

你爲什麼要返回重複的1? – Styphon

+0

爲了完整性,我需要返回一個重複項。如果我有記錄a,b,b,c,d,那麼我想返回a,b,c,d – Ruf1

+0

@ Ruf1所有列的重複值是否相同,還是隻是某個列中的重複值? –

回答

3

@AlexW - 它只是列「URL」,其中可能有重複的 - Ruf1 9分鐘前

然後,如果你糾正語法第一個查詢將工作 - GROUP BY必須遵循WHERE(每the docs):

SELECT * 
FROM directory_listings 
WHERE status = 'approved' 
GROUP BY url 
ORDER BY site_name ASC 

Here's an example of a working query in SQL Fiddle.

+0

完美地工作,非常感謝。 – Ruf1

+0

我還需要一個類似的查詢來確定唯一行的數量。這將是正確的,或者我使用組:「SELECT COUNT(DISTINCT url)FROM directory_listings WHERE status ='approved'」 – Ruf1

+0

這應該工作正常;另請參閱http://stackoverflow.com/q/4131937/2359271。如果你使用了GROUP BY,你會得到每個組的單獨計數(這可以用來查找重複數據,如[本例中](http://sqlfiddle.com/#!2/eac2f8/10)!) – Air

1

您的SELECT DISTINCT語法是錯誤的:

http://dev.mysql.com/doc/refman/5.6/en/select.html

此外,唯一的原因GROUP BY是行不通的消除重複是如果WHERE子句將取消一些行的資格(即它們在statusurl兩者中都不重複)。

+0

+1,這個關於WHERE條款的好處。通過明確地給出正確的語法而不是僅僅鏈接文檔,IMO的這個答案將大大改善。我知道什麼時候開始使用SQL,我發現文檔中的語法描述非常混亂;並且外部鏈接可能不穩定。 – Air