首頁 > 資料庫 > mysql教程 > 如何將 PostgreSQL 的 SELECT DISTINCT ON 查詢轉換為 MySQL?

如何將 PostgreSQL 的 SELECT DISTINCT ON 查詢轉換為 MySQL?

Barbara Streisand
發布: 2024-11-13 15:26:02
原創
402 人瀏覽過

How to Convert PostgreSQL's SELECT DISTINCT ON Queries to MySQL?

將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 查詢是:

SELECT col4, col5
FROM tablename
GROUP BY col1, col2, col3;
登入後複製

PostgreSQL 和MySQL 都會為每個(colSQL col2, col3)組合會傳回一行,但由於缺乏明確的排序,傳回的具體行可能會有所不同。

有序查詢的解決方法

為了模仿PostgreSQL 的有序DISTINCT ON 行為,需要在MySQL 中進行更複雜的查詢:

SELECT t1.col4, t1.col5
FROM tablename t1
INNER JOIN (
    SELECT col1, col2, col3, MIN(col4) AS m_col4
    FROM tablename
    GROUP BY col1, col2, col3
) s
ON t1.col1 = s.col1
AND t1.col2 = s.col2
AND t1.col3 = s.col3
AND t1.col4 = s.m_col4
GROUP BY
    t1.col1, t1.col2, t1.col3, t1.col4;
登入後複製

結論

雖然MySQL沒有與 Postgresql 的 SELECT DISTINCT ON 完全對應的功能,但涉及 GROUP BY 擴展的解決方法可以提供類似的功能。解決方法的複雜性可能會根據查詢要求而有所不同。

以上是如何將 PostgreSQL 的 SELECT DISTINCT ON 查詢轉換為 MySQL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板