MySQL:了解 DISTINCT 选择多列
处理 MySQL 表中的重复行时,可以使用 DISTINCT 关键字来检索唯一的行值,但在选择多个列时也会造成限制。本文解决了使用 DISTINCT 时检索所有字段的问题,以及为重复行选择最新条目的解决方案。
DISTINCT 对多列的限制
DISTINCT 不是一个仅适用于特定列的函数。相反,它是一个影响选择列表中所有列的查询修饰符。它会删除 所有 列的值相同的重复行。
DISTINCT 的正确语法
DISTINCT 必须立即出现在 SELECT 之后(以及其他查询修饰符,例如 SQL_CALC_FOUND_ROWS)。在查询修饰符后面,应列出列名称。
例如:
<code class="sql">SELECT DISTINCT foo, ticket_id FROM table...</code>
此查询将为 Ticket_id 和 foo 中每个不同的值对输出一行。
选择所有列的解决方案
选择所有字段并仍然使用 DISTINCT 是不可能的,因为它要求所有列都相同才能去除重复。但是,有一个解决方法可用于选择重复行的最新条目:
<code class="sql">SELECT t1.* FROM table AS t1 JOIN ( SELECT ticket_id, MAX(row_id) AS max_id FROM table GROUP BY ticket_id ) AS t2 ON t1.ticket_id = t2.ticket_id AND t1.row_id = t2.max_id</code>
此查询使用子查询查找每个 Ticket_id 的最大 row_id,然后将主表与子查询连接起来为每个ticket_id选择最新行。
以上是如何在MySQL中选择所有具有DISTINCT的列?的详细内容。更多信息请关注PHP中文网其他相关文章!