Fügt Distinct in dieser Abfrage irgendeinen Wert hinzu oder tut es etwas?

357
NZ Dev

Angenommen, das Feld Users.Id ist eindeutig automatisch inkrementiert. MEINE HAUPTFRAGE: Macht "Distinct" in dieser Abfrage irgendetwas, ist es völlig sinnlos, es in dieser spezifischen Abfrage zu haben?

SELECT DISTINCT users.id, CONCAT(users.firstname, ' ', users.surname) AS name FROM users  WHERE users.id!=$me AND (LOWER(users.firstname) LIKE '$term%' AND (email='$email' OR username='$email')) 

-

Wenn die Abfrage geändert wurde in:

SELECT DISTINCT users.surname, firstname, surname FROM users WHERE surname = 'Smith'' 

Dann bekomme ich vielleicht nur Jane Smith oder John Smith als Ergebnis, aber nicht beide oder irgendjemand anderen mit dem Namen Smith, Correct?

(Die Top-Abfrage ist das Original)

1
Ja, das ist richtig. Wenn Sie ändern, um `DISTINCT users.surname, Vorname, Nachname 'zu verwenden, können Sie sicher sein, dass Sie nur bestimmte Werte für diese ausgewählten Felder erhalten. Wenn Sie über Jane Smith und John Smith verfügen, werden diese beiden Datensätze weiterhin aufgelistet. Wenn Sie zwei oder mehr John Smiths haben, würden Sie zum Beispiel nur einen einzigen Datensatz für John Smith erhalten, nicht beide. Wenn Sie also DISTINCT für ein oder mehrere Felder verwenden, stellen Sie sicher, dass diese Felddatensätze keine doppelten Werte sind (dh unterschiedliche Werte) ) wobei alle Werte gleich sind. https://www.w3schools.com/sql/sql_distinct.asp Pimp Juice IT vor 6 Jahren 0
Sie sagen also: "Alle ausgewählten Felder werden in der Unterscheidung verwendet". In der ersten Abfrage würde also das ID-Feld die Unterscheidung unbrauchbar machen, da jede ID eindeutig ist. und in der zweiten Abfrage würden 2 John Smiths als ein Ergebnis zurückgegeben, aber John und Jane würden als Ergebnis 2 zurückgegeben. NZ Dev vor 6 Jahren 0
Das klingt für mich richtig, aber Sie können dies leicht testen, um zu bestätigen, richtig? Ich bin fast sicher, dass es das Gleiche ist, also lassen Sie es einen Testlauf und bestätigen Sie das. Ich erinnere mich daran, dass es sich an das letzte Mal gearbeitet hat, als ich es verwendet habe. Sie können es jedoch einfach testen und mit einer einfachen Testauswahl bestätigen. Pimp Juice IT vor 6 Jahren 0

1 Antwort auf die Frage

0
RajBedi

DISTINCT-Klausel entfernt doppelten Datensatz aus der Ausgabe der Auswahlabfrage. Wenn also eine der SELECT-Spalten in Ihrer Abfrage UNIQUE ist, gibt es keinen Grund, DISTINCT zu verwenden. Dies kann die Leistung beeinträchtigen, da der Db-Server versucht, die doppelten Datensätze herauszufinden, die nicht vorhanden sind. Bei der ersten Abfrage werden die Ergebnisse nicht geändert, da Sie eine eindeutige Benutzer-ID zurückgeben. Selbst wenn Sie Unique entfernen, werden die Ergebnisse nicht geändert, und Sie sollten auch eine bessere Leistung sehen.

Wenn in Ihrer zweiten Abfrage zwei oder mehr Benutzer denselben Namen haben, erhalten Sie ein Ergebnis.

Vielen Dank. Ich habe Ihre Antwort gewählt, weil mir Ihr erster Absatz gefallen hat. Ihr letzter Satz ist ein wenig mehrdeutig. Er sollte möglicherweise sagen: "Wenn Sie in der zweiten Abfrage zwei oder mehr Benutzer denselben FullName haben, erhalten Sie am Ende ein Ergebnis." Danke noch einmal NZ Dev vor 6 Jahren 0