いいえ、これで問題ありません。これは、DISTINCT
を使用する場合のまれなケースの1つにすぎません。 重複を削除するためのキーワード。
この場合、これは、複数の行を返す場合でも、クエリのロジックが正しいという事実によって正当化されます。多くの場合、DISTINCT
の使用法を見ることができます 実際にクエリのロジックが間違っている場合。
補足:
-
WHERE
で使用しているテーブル参照のフィルターIS NULL/IS NOT NULL
以外の句LEFT JOIN
を作成します この同じテーブル参照で、INNER JOIN
に移動します 、最終的な結果セットの動作について。 (これを参照してください: https://stackoverflow.com/a/15483895/1291428 ) -
GROUP BY
は使用しないでくださいDISTINCT
の効果をシミュレートします 、2つの理由:1/これは目的ではありません。
GROUP BY
の効果の1つ 重複を排除することですが、その主な目的は、いくつかの分析計算/操作を適用するために、特定の基準セットに従って行をグループ化することです。2 /
GROUP BY
また、ORDER BY
結果(mysql内)。これは必ずしも必要なものではなく、その場合は実行速度が低下します。エンジンが提供するものを適切に使用するようにしてください。これは、上位互換性の観点から常に優れています。 (付与されたものとして含めるものは実際にはそうではないことを予期して)
よろしく。