SQL: Wie halten Sie Zeilen, um mit DISTINCT?

Die folgende SQL-Abfrage:

SELECT messages.id, messages.created_at, comments.created_at FROM messages
LEFT JOIN comments ON comments.message_id = messages.id 
WHERE (messages.id IN (429,443)) 
ORDER BY GREATEST(messages.created_at, comments.created_at) DESC

gibt:

 id         messages.created_at     comments.created_at
--------------------------------------------------------
 443                2                       5
 429                1                       4
 443                2                       3

 (I replaced dates with numbers for readability)

Zu bekommen jede id nur einmal habe ich Hinzugefügt DISTINCT:

SELECT DISTINCT messages.id FROM messages
LEFT JOIN comments ON comments.message_id = messages.id 
WHERE (messages.id IN (429,443)) 
ORDER BY GREATEST(messages.created_at, comments.created_at) DESC

Aber, in der das Ergebnis der id Werte geändert werden, um:

id
---
429
443

Was könnte der Grund dafür ?

Wie könnte ich die bestellen ?

  • Meine Vermutung ist, dass mysql Stoppt, nachdem er die ersten beiden Spiele und ordnet diese entsprechend. Wahrscheinlich die letzten beiden Einträge sind gefunden zu werden, Erstens weil Sie eingefügt wurden erste Beurteilung durch Ihre Nutzung des created_at.
  • Ich bin mir nicht sicher, aber Sie nicht wirklich wissen, welche der Zeilen, die Sie behalten, nachdem das deutlich. Ich bin mir nicht sicher, wie mysql funktioniert. Es wäre interessant zu sehen, dass Sie beide Abfragen ausführen und umfassen sowohl created_at Spalten.
  • SELECT messages.id, messages.created_at, comments.created_at so können wir sehen, wie die Werte der anderen Spalten, da das ist, was Sie die Bestellung durch. Ich vermute, dass die created_at für 429 höher ist als der created_at für 443
  • Ich aktualisiert die Frage.
Schreibe einen Kommentar