PostgreSQLは現在、あいまいなGROUP BYを許可していません 結果がテーブルがスキャンされる順序、使用される計画などに依存するステートメント。これは、標準ではAFAIKで機能する必要があると述べていますが、一部のデータベース(5.7より前のMySQLバージョンなど)では、最初の値を選択するだけの緩いクエリが許可されますSELECTに表示される要素で検出されました リストしますが、GROUP BYにはありません 。
PostgreSQLでは、 DISTINCT ON
この種のクエリの場合。
次のようなものを書きたい:
SELECT DISTINCT ON (anwendung.name) anwendung.name, autor.entwickler
FROM author
left join anwendung on anwendung.name = autor.anwendung;
(フォローアップコメントに基づいて構文が修正されました)
これは、MySQL5.7のANY_VALUE(...)に少し似ています。 group byの疑似関数 、ただし逆に、distinct onの値は 句は一意である必要があり、列には任意の値を使用できます 指定されています。
ORDER BYがない限り 、どの値が選択されるかについての保証はありません。通常、ORDER BYが必要です 予測可能性のために。
min()のような集計を使用することにも注意してください。 またはmax() 動作します。これは真実ですが、DISTINCT ONを使用する場合とは異なり、信頼性が高く予測可能な結果が得られます。 またはあいまいなGROUP BY -追加の並べ替えや集計が必要なため、パフォーマンスコストがかかり、順序データ型でのみ機能します。