phpMyAdmin
 sql >> Datenbank >  >> Database Tools >> phpMyAdmin

Warum erhalte ich bei Left Join NULL-Werte?

Sie führen eine group by durch (3 Spalten) mit 5 Spalten nicht aggregierter Spalten in der Auswahlliste. Es spielt auch keine Rolle, es gibt keine Aggregate in der Spaltenausgabe.

MySQL behandelt das als distinct (für die 3 Spalten) und bringt die erste Zeile zurück, auf die es im MRU-Cache stößt, und wenn kein Cache vorhanden ist, die ersten, die im Clustered-Index oder in der physischen Reihenfolge gefunden wurden, um die 2 nicht gruppierten Spalten zu erfüllen.

Mit anderen Worten, es ist ein Benutzerfehler. Ein Schnafu. Ich empfehle, Ihre Absicht mit GROUP BY zu bereinigen .

Etwas verwandt, lesen Sie eine aktuelle Antwort von mir hier bezogen auf ONLY_FULL_GROUP_BY . Siehe am Ende dieses Links MySQL Handling of GRUPPIEREN NACH was meiner Ansicht nach eine Beschönigung der wirklichen Probleme und Nicht-Standards ist, die MySQL zuließ und die unerwartete und schwer zu erklärende Daten von Verstößen gegen diesen Standard lieferten.

Was hat das MySQL-Entwicklerteam also getan? Sie haben den Standard standardmäßig (ab Version 5.7) implementiert, um die Arten von Abfragen zu verbieten, die Sie gerade ausgeführt haben.

Bearbeiten1

Ihre Suchanfrage ohne GROUP BY aber mit einer order by newGroups.id,people.id , auf einem Server der Version 5.7.14: