ホームページ >データベース >mysql チュートリアル >PostgreSQL の SELECT DISTINCT ON クエリを MySQL に変換するにはどうすればよいですか?

PostgreSQL の SELECT DISTINCT ON クエリを MySQL に変換するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-13 15:26:02374ブラウズ

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

PostgreSQL から MySQL への DISTINCT ON クエリの変換

PostgreSQL から MySQL への移行において、ユーザーは、クエリを削除するための構文の違いに遭遇する可能性があります。特定の列値に基づいて行を複製します。 PostgreSQL は SELECT DISTINCT ON ステートメントを使用しますが、MySQL は GROUP BY 句の拡張を使用します。

PostgreSQL の SELECT DISTINCT ON

SELECT DISTINCT ON (col1,col2, Col3) PostgreSQL のクエリは、指定された列の一意の組み合わせごとに最初の条件を満たす行を保持します。たとえば、次のテーブルについて考えてみましょう:

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 はどちらも (col1、col2、col3) の組み合わせごとに 1 行を返しますが、返される特定の行は、明示的な順序付けがないため異なる場合があります。

順序付きクエリの回避策

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。