2011-08-30 160 views
29

我想選擇mysql表中的重複行它對我來說工作正常,但問題是它不讓我選擇該查詢中的所有字段,只是讓我選擇我使用的字段名爲不同的,還是讓我寫查詢以獲取更好understadingMysql select distinct

mysql_query("SELECT DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id") 

mysql_query("SELECT * , DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id") 

一日一工作正常

現在,當我試圖選擇所有字段我有錯誤

我試圖選擇結束了最新的副本讓我們說ticket_id 12 7是行ID 7,8,9的3倍,所以我想用這將是9在這種情況下的最新條目一旦選擇它,並適用於TICKET_ID的

任何想法的所有其餘 感謝

+2

第二個查詢是錯誤的。解釋你試圖解決什麼任務 – zerkms

+0

你試圖返回什麼其他領域?如果一列有特定'ticket_id'的多個值,那麼應該發生什麼? –

+0

讓我們說ticket_id 127是3次行ID 7,8,9所以我想選擇一次與最新的條目,這將是9在這種情況下,這適用於所有其餘的ticket_id的...任何想法現在 - – Shanon

回答

37

您是否在尋找"SELECT * FROM temp_tickets GROUP BY ticket_id ORDER BY ticket_id

UPDATE

SELECT t.* 
FROM 
(SELECT ticket_id, MAX(id) as id FROM temp_tickets GROUP BY ticket_id) a 
INNER JOIN temp_tickets t ON (t.id = a.id) 
+0

工作,但我想選擇最新的重複讓let ticket_id 127是3次行id 7,8,9,所以我想選擇一次與最新的條目,這將是9在這種情況下,這適用在所有其餘的ticket_id的...現在任何想法 – Shanon

+1

檢查更新的版本 – a1ex07

56

DISTINCT是不是隻適用於一些列的功能。這是一個查詢修飾符,適用於選擇列表中的所有列。

也就是說,只有當列的所有列與另一行的列相同時,DISTINCT纔會減少行數。

DISTINCT必須緊跟在SELECT之後(以及其他查詢修飾符,如SQL_CALC_FOUND_ROWS)。然後在查詢修飾符之後,您可以列出列。

  • RIGHT:SELECT DISTINCT foo, ticket_id FROM table...

    輸出一排值的跨TICKET_ID FOO每個不同的配對。

  • WRONG:SELECT foo, DISTINCT ticket_id FROM table...

    如果有TICKET_ID的三個不同的值,這將返回只有三個行?如果有六個不同的foo值呢?應該輸出foo的六個可能值中的哪三個值?
    這是模糊的書面。

2

您可以使用這樣的

的mysql_query( 「SELECT DISTINCT(TICKET_ID),列1,列2,欄3 FROM temp_tickets ORDER BY TICKET_ID」)

+0

雖然MySQL允許的語法,它不會做你認爲它... – Jannes

+0

不是答案... –

8

您可以通過,而不是使用組不同。因爲當你使用不同的時候,你會很難從表中選擇所有的值。與使用group by時不同,您可以獲得不同的值以及表格中的所有字段。