sql >> Databasteknik >  >> Database Tools >> phpMyAdmin

Varför får jag NULL-värden på Left Join?

Du utför en group by (3 kolumner) med 5 kolumner med icke aggregerade kolumner i urvalslistan. Inte för att det spelar någon roll, det finns inga aggregat i kolumnutdata.

MySQL behandlar det som en distinct (för de 3 kolumnerna) och tar tillbaka den första raden den stöter på i MRU-cachen, och om det inte finns någon cache, de första som påträffas i det klustrade indexet eller den fysiska ordningen för att uppfylla de 2 icke-grupperade kolumnerna.

Det är med andra ord ett användarfel. Ett smyg. Jag rekommenderar att du rengör din avsikt med GROUP BY .

Något besläktat, läs mitt senaste svar Här relaterat till ONLY_FULL_GROUP_BY . Se längst ner på den länken är MySQL-hantering av GRUPPER AV vilket enligt min uppfattning är en översikt över de verkliga problemen och icke-standarder som MySQL tillät, vilket gjorde oväntade och svårförklarliga data från brott mot den standarden.

Så vad gjorde MySQL-utvecklingsteamet? De implementerade standarden som standard (från och med version 5.7) för att inte tillåta de typer av frågor du just utförde.

Redigera1

Din fråga, utan GROUP BY men med en order by newGroups.id,people.id , på en server med version 5.7.14:




  1. Välj rader efter en rad med ett visst värde

  2. Hur man visar värden i Col3 där Col1-värdena är sanna och för falska värden i Col1 visar endast NULL i Col3

  3. Dina första frågor i SQL Editor

  4. Skapa tabellfel i mysql när du använder CURDATE() som standard