【问题标题】:MySQL 5.7 return all columns of table based on distinct columnMySQL 5.7 根据不同的列返回表的所有列
【发布时间】:2016-09-14 13:18:10
【问题描述】:

我刚刚升级到 MySQL 5.7,不幸的是,GROUP BY 的一些功能已经消失。我想从我的movies 表中选择所有电影,只要int 类型的movies.id 不是重复的。我之前在 MySQL 5.6 中的查询是:

SELECT *
FROM movies
WHERE movies.title LIKE '%example%'
GROUP BY movies.id

如果我有两部电影具有相同的 id,它只会显示一部电影,而不是该电影及其副本。

当我升级到 MySQL 5.7 时,GROUP BY 给了我错误,我被告知使用 ORDER BY。但是这个查询:

SELECT *
FROM movies
WHERE movies.title LIKE '%example%'
ORDER BY movies.id

返回重复的电影。那么,有没有办法将其过滤掉,并且仅在不重复时才返回一行?

编辑:例如,如果这是我的movies 表:

movies
==================
|  id  |   title  |
==================
| 1    | example  |
------------------
| 2    | example  |
------------------
| 1    | example  |
------------------

这是每个查询的输出:

Previous query result (with MySQL 5.6)
=======
1 | example
2 | example

New query result (with MySQL 5.7 and ORDER BY)
=======
1 | example
1 | example
2 | example

我希望最终结果不包含重复项(因此结果应该类似于第一个查询结果)。

编辑 2:我知道我有点滥用 MySQL 处理 GROUP BY 的方式。不幸的是,我对 MySQL 没有太多经验,并从 StackOverflow 得到了答案。我只想返回表中不包含重复 ids 的所有列。

【问题讨论】:

  • 为什么会有重复的电影?如果您没有 PRIMARY KEY,那么就 RDBMS 而言,您没有表。
  • @Strawberry 这是学校的作业。我们故意为这项任务提供了错误的数据。 :|不幸的是,我们要返回不重复的行。在 5.7 之前一切正常。但我无法降级,因为我需要它提供的一些新功能。
  • GROUP BY 旨在与聚合函数一起使用。 SELECT DISTINCT 旨在用于不需要聚合的地方。
  • @Strawberry 据我了解,我在不知不觉中滥用了 MySQL 5.6 的工作方式(我从堆栈溢出的答案中得到了 GROUP BY 的东西)。我真的很想返回所有不包含重复 ID 的行。
  • 一般 GROUP BY 规则说:如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须标识一个分组列或作为集合函数的参数。 (旧的 MySQL 版本不关心这个,而是返回任意结果。)

标签: mysql sql database


【解决方案1】:

我相信distinct关键字会很容易使用

SELECT distinct movies.*
FROM movies 
WHERE movies.title = 'example'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多