Das Problem ist, dass MySQL ist wirklich dumm Dinge, wenn ein Aggregatfunktion wird eingeführt oder GROUP BY
ist enthalten, aber nicht Alle Felder befinden sich in einer Aggregatfunktion oder GROUP BY
.
Sie fragen es zu GROUP BY num
aber keiner der anderen Spalten in Ihrer SELECT
sind in der Gruppe BY enthalten, noch werden sie mit einer Funktion zu Gruppen zusammengefasst (SUM, MAX, MIN, AVG, etc ..)
In anderen RDBMS würde diese Abfrage nicht ausgeführt werden und würde einen Fehler auslösen, aber MySQL macht einfach weiter. Es verwendet die Logik, um zu entscheiden, welchen Wert es für jedes Feld zeigen soll, das nicht num
ist, indem es einfach den ersten Wert in seinem Datenspeicher findet, der zwischen innoDB und allem, was andere Leute mehr verwenden, unterschiedlich sein kann.
Meine Vermutung ist, dass in Ihrem Fall, dass Sie mehr als einen Datensatz in lignee_new
haben, die einen num
von 43 hat, seit Sie GROUP BY num
und sonst nichts, es Werte nur zufällig aus dem mehrere Datensätze packt wo num=43
und zeigt sie ... das ist vernünftig. Wenn Sie sie nicht in eine Aggregatfunktion einschließen, sagen Sie ziemlich genau: "Es ist mir egal, was Sie für diese anderen Felder anzeigen, bringen Sie einfach etwas zurück", und das tut MySQL.
Entfernen Sie Ihre GROUP BY
Klausel vollständig und Sie werden Daten sehen, die Sinn ergeben. Vielleicht verwenden Sie WHERE
, um Ihre Datensätze weiter zu filtern, um Nullen oder andere Dinge loszuwerden, die Sie nicht benötigen (verwenden Sie GROUP BY
nicht zum Filtern).
Das ist eine gute Frage, aber wir müssen die Daten sehen? – JonH
Stimmen Sie zu, müssen Sie die Daten sehen, aber es ist in der rechten oder linken Verknüpfung, die Nullen hinterlässt. –
Eine andere Möglichkeit, die WHERE-Klausel könnte Daten ausschneiden, wo immer noch ein NUM-Feld die Zeile enthält. –