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 选择不同的的主要内容,如果未能解决你的问题,请参考以下文章