【问题标题】:Mysql select distinctMysql 选择不同的
【发布时间】: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 ...现在有什么想法了——
  • 关注每组最大 n 个标签。你在评论中给出的这个问题已经在 Stack Overflow 上被回答了几十次。

标签: mysql select greatest-n-per-group


【解决方案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】:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-05-03
          • 2013-03-20
          • 2017-03-25
          • 2021-02-14
          • 1970-01-01
          • 2020-10-14
          • 2018-07-31
          • 1970-01-01
          相关资源
          最近更新 更多