Nie, to jest w porządku. To tylko jeden z rzadkich przypadków, gdy chcesz użyć DISTINCT
słowo kluczowe do usuwania duplikatów.
W tym przypadku jest to uzasadnione tym, że logika zapytania jest poprawna, mimo że zwraca więcej niż jeden wiersz. Wiele razy można zobaczyć użycie DISTINCT
kiedy w rzeczywistości logika zapytania jest nieprawidłowa.
Uwaga dodatkowa:
- dowolny filtr w odniesieniu do tabeli, którego używasz w
WHERE
klauzula inna niżIS NULL/IS NOT NULL
wykonałby dowolneLEFT JOIN
w tym samym odwołaniu do tabeli przejdź doINNER JOIN
, tak jak w przypadku zachowania końcowego zestawu wyników. (zobacz to:https://stackoverflow.com/a/15483895/1291428 ) -
nie powinieneś używać
GROUP BY
symulować efektDISTINCT
, z dwóch powodów:1/ To nie jest cel. Jeden z efektów
GROUP BY
jest wyeliminowanie duplikatów, ale jego głównym celem jest grupowanie wierszy według określonego zestawu kryteriów, aby zastosować na nich pewne obliczenia/operacje analityczne.2/
GROUP BY
takżeORDER BY
wyniki (w mysql), co niekoniecznie jest tym, czego chcesz, a w takim przypadku spowalnia wykonanie. Proszę, po prostu zadbaj o odpowiednie wykorzystanie tego, co zapewniają silniki, co zawsze jest lepsze z punktu widzenia kompatybilności w przód. (przewidując, że to, co uwzględnisz jako przyznane, w rzeczywistości nie jest)
pozdrawiam.