首頁 > 資料庫 > mysql教程 > 如何在 MySQL 中複製 Postgresql 的 SELECT DISTINCT ON?

如何在 MySQL 中複製 Postgresql 的 SELECT DISTINCT ON?

Barbara Streisand
發布: 2024-11-08 16:59:02
原創
1083 人瀏覽過

How to Replicate Postgresql's SELECT DISTINCT ON in MySQL?

將Postgresql 的SELECT DISTINCT ON 轉換為MySQL

從Postgresql 移轉到DgreIST轉換查詢的情況對其MySQL 的ON語句

Postgresql 的 SELECT DISTINCT ON

在 Postgresql 中,SELECT DISTINCT ON 用於依據指定列的唯一組合刪除重複列。它消除了所有匹配的行,並只保留每個不同組合的“第一”行。

MySQL 對 GROUP BY 的擴充

MySQL 沒有與 SELECT 完全對應的功能與眾不同。相反,它採用了 GROUP BY 的擴展,允許選擇非聚合列,即使它們沒有在 GROUP BY 子句中命名。然而,從每個組別中選擇哪個值是不可預測的。因此,我們可以在MySQL 中使用GROUP BY 來實現類似的效果:

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

此查詢將傳回每個(col1, col2, col3) 組合的「第一」行,但具體順序這些行是不確定的。

維護行順序

指定回傳行的順序,我們可以使用子查詢:

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

雖然這種方法看起來合乎邏輯,但MySQL 仍然可以自行決定為col4 和col5 選擇任何值。為了確保預期的行順序,我們需要一個更複雜的查詢:

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;
登入後複製

結論

雖然Postgresql的SELECT DISTINCT ON沒有直接翻譯到MySQL,使用GROUP BY 和子查詢的解決方法提供了所需的功能。然而,產生的 MySQL 查詢可能比 Postgresql 查詢更複雜。

以上是如何在 MySQL 中複製 Postgresql 的 SELECT DISTINCT ON?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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