Не, това е добре. Това е само един от редките случаи, когато искате да използвате 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), което не е непременно това, което искате и в този случай забавя изпълнението. Моля, просто осигурете подходящо използване на това, което предоставят двигателите, това винаги е по-добре от гледна точка на съвместимостта напред. (предвидявайки, че това, което сте включили като предоставено, всъщност не е)
поздрави.