Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL LEFT JOIN дублира резултатите

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

поздрави.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да сортирам резултат от mysql по списък с приоритетни идентификатори?

  2. mysql към php към xml показва празна възраст

  3. django auth Потребителско съкращаване на имейл поле

  4. Предоставяне на потребителско разрешение само за преглед на MySQL изглед и нищо друго

  5. Множество бази данни и транзакции