Не, това е добре. Това е само един от редките случаи, когато искате да използвате DISTINCT
ключова дума за премахване на дубликати.
В този случай това е оправдано от факта, че логиката на заявката е правилна, въпреки че връща повече от един ред. Много пъти може да се види използването на DISTINCT
когато всъщност логиката на заявката е грешна.
Странична бележка:
- всеки филтър за препратка към таблица, която използвате в
WHERE
клауза, различна отIS NULL/IS NOT NULL
ще направи всякоLEFT JOIN
на същата тази таблица препратете къмINNER JOIN
, що се отнася до поведението на крайния резултат. (вижте това:https://stackoverflow.com/a/15483895/1291428 ) -
не трябва да използвате
GROUP BY
за симулиране на ефекта наDISTINCT
, поради 2 причини:1/ Това просто не е целта. Един от ефектите на
GROUP BY
е да елиминира дубликати, но основната му цел е да групира редове според определен набор от критерии, за да приложи някои аналитични изчисления/операции върху тях.2/
GROUP BY
същоORDER BY
резултатите (в mysql), което не е непременно това, което искате и в този случай забавя изпълнението. Моля, просто осигурете подходящо използване на това, което предоставят двигателите, това винаги е по-добре от гледна точка на съвместимостта напред. (предвидявайки, че това, което сте включили като предоставено, всъщност не е)
поздрави.