将 DISTINCT ON 查询从 PostgreSQL 转换为 MySQL
在从 PostgreSQL 转换为 MySQL 的过程中,用户可能会遇到消除语法上的差异基于特定列值的重复行。 PostgreSQL 使用 SELECT DISTINCT ON 语句,而 MySQL 使用 GROUP BY 子句的扩展。
PostgreSQL 的 SELECT DISTINCT ON
SELECT DISTINCT ON (col1, col2, PostgreSQL 中的 col3) 查询为指定列的每个唯一组合保留第一个符合条件的行。例如,考虑下表:
col1 | col2 | col3 | col4 | col5 |
---|---|---|---|---|
1 | 2 | 3 | 777 | 888 |
1 | 2 | 3 | 888 | 999 |
3 | 3 | 3 | 555 | 555 |
查询将输出:
col4 | col5 |
---|---|
777 | 888 |
555 | 555 |
MySQL 对 GROUP BY 的扩展
MySQL 的扩展允许选择非聚合列,即使它们未包含在 GROUP BY 子句中。但是,服务器可以自由地为每个组从这些列中选择任意值。
等效 MySQL 查询
PostgreSQL 示例的等效 MySQL 查询是:
PostgreSQL 和 MySQL 都会为每个 (col1, col2, col3) 组合返回一行,但返回的是特定行由于缺乏明确的排序,可能会有所不同。
有序查询的解决方法
为了模仿 PostgreSQL 的有序 DISTINCT ON 行为,MySQL 中更复杂的查询是必需:
结论
虽然 MySQL 没有 Postgresql 的 SELECT DISTINCT ON 的精确对应项,但涉及 GROUP BY 扩展的解决方法可以提供类似的功能。解决方法的复杂性可能会根据查询要求而有所不同。
以上是如何将 PostgreSQL 的 SELECT DISTINCT ON 查询转换为 MySQL?的详细内容。更多信息请关注PHP中文网其他相关文章!