【发布时间】:2016-04-07 11:24:33
【问题描述】:
在 MySQL 中,我使用了很多如下所示的结构:
LEFT JOIN(
SELECT field_one, field_two, field_three FROM (
SELECT field_one, field_two, field_three FROM table_one
ORDER BY field_three
) o GROUP BY field_one
) abc ON cur_table.some_field = abc.field_one
我使用它,因为它可以帮助我完成一项日常任务——在分组之前对一些数据进行排序。现在我想知道如何将这个 SQL 结构从 MySQL 迁移到 SQLite 和 PostgreSQL。
【问题讨论】:
-
用样本数据准备sqlfiddle.com。提供准确的答案会容易得多
-
为我工作(在 SQLite 中)。你为什么不试试呢?
-
我没有尝试过,因为我在 Postgresql 中的某个地方有红色,例如,他们以其他方式做类似的事情(这对我来说看起来相当丑陋)。所以我认为它不标准。
-
派生表中的
order by没有意义,并且服务器没有实际用途,因为查询中中间步骤的行的“顺序”无关紧要。另外:) o group by field_one是无效的 SQL(您不能“分组”表别名)。另外:group by没有任何意义,因为您没有使用任何聚合。我不明白你想用这个实现什么。您要解决的根本问题是什么?你为什么不直接加入这两个表呢?无用的order by和错误的group by是什么原因? -
@a_horse_with_no_name。假设
field_three是一些auto_increment 字段,field_one是外键,它指向当前表中的字段some_field(在我的示例中具有别名cur_table)。现实世界的任务是获取一些重要数据(来自 field_two),当前表中每个some_field一个。任务可能是获取table_one中第一个或最后一个插入的数据。因此,我确实需要order by,它确实有道理,而且我确实需要分组,而且我不需要任何聚合。
标签: mysql sql postgresql sqlite greatest-n-per-group