2011-08-30 132 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时不同,您可以获得不同的值以及表格中的所有字段。