Mysql 选择不同的

Posted

技术标签:

【中文标题】Mysql 选择不同的【英文标题】:Mysql select distinct 【发布时间】:2011-11-07 05:04:54 【问题描述】:

我正在尝试选择 mysql 表中的重复行,这对我来说工作正常,但问题是它不允许我选择该查询中的所有字段,只是让我选择我用作不同的字段名称,让我编写查询以便更好地理解

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 127 在行 id 7、8、9 上是 3 次,所以我想用最新的条目选择一次,在这种情况下是 9,这适用于所有其余的ticket_id

任何想法 谢谢

【问题讨论】:

第二个查询是错误的。说明您要解决的任务 您还想返回哪些其他字段?如果一列有多个特定 ticket_id 的值,那么应该发生什么? 假设 ticket_id 127 在行 id 7,8,9 上是 3 次,所以我想用最新的条目选择一次,在这种情况下为 9,这适用于所有其余的ticket_id's ...现在有什么想法了—— You can use one of the techniques in the answers here 关注每组最大 n 个标签。你在评论中给出的这个问题已经在 Stack Overflow 上被回答了几十次。 【参考方案1】:

DISTINCT 不是仅适用于某些列的函数。它是一个查询修饰符,适用于选择列表中的所有列。

也就是说,仅当 所有 列与另一行的列相同时,DISTINCT 才会减少行。

DISTINCT 必须紧跟在 SELECT 之后(以及其他查询修饰符,如 SQL_CALC_FOUND_ROWS)。然后在查询修饰符之后,您可以列出列。

正确: SELECT DISTINCT foo, ticket_id FROM table...

为ticket_id foo中的每个不同的值对输出一行。

错误: SELECT foo, DISTINCT ticket_id FROM table...

如果ticket_id 有三个不同的值,这会只返回三行吗?如果 foo 有六个不同的值怎么办? foo 的六个可能值中应该输出哪三个值? 写的很模糊。

【讨论】:

【参考方案2】:

您在寻找"SELECT * FROM temp_tickets GROUP BY ticket_id ORDER BY ticket_id 吗?

更新

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)

【讨论】:

可行,但我正在尝试选择最新的重复项,比如说 ticket_id 127 在第 7、8、9 行上是 3 次,所以我想用最新的条目选择一次在这种情况下为 9,这适用于所有其余的 ticket_id ......现在有什么想法【参考方案3】:

您可以使用 group by 而不是 distinct。因为当您使用 distinct 时,您将很难从表中选择所有值。与使用分组依据不同,您可以获得不同的值以及表中的所有字段。

【讨论】:

【参考方案4】:

你可以这样使用DISTINCT

mysql_query("SELECT DISTINCT(ticket_id), column1, column2, column3 
FROM temp_tickets 
ORDER BY ticket_id");

【讨论】:

【参考方案5】:

使用子选择:

http://forums.asp.net/t/1470093.aspx

【讨论】:

以上是关于Mysql 选择不同的的主要内容,如果未能解决你的问题,请参考以下文章

MySQL选择不同的计数

MySQL选择左连接不同?

选择的mysql时间与实际行不同

MYSQL从同一张表中选择不同的记录

MySQL 从 3 个表中选择不同的产品

Mysql 从不同的表中按名称选择