Ich gehe durch die Mysql-Dokumente und unter the common queries section, erwähnen sie, wie Sie den maximalen Spaltenwert einer Tabelle mit einem LINKEN JOIN erhalten. Hier ist die Tabelle:Wie funktioniert die Verwendung von JOIN zum Sortieren von Tabellen?
SELECT * FROM shop;
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 0001 | A | 3.45 |
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | B | 1.45 |
| 0003 | C | 1.69 |
| 0003 | D | 1.25 |
| 0004 | D | 19.95 |
+---------+--------+-------+
Und hier ist die Abfrage:
SELECT s1.article, s1.dealer, s1.price
FROM shop s1
LEFT JOIN shop s2 ON s1.price < s2.price
WHERE s2.article IS NULL;
Es gibt mehrere Dinge, die ich nicht Kopf oder Zahl machen.
Zunächst ohne LIMIT 1
Anweisung oder Bestellung (die den Zweck der JOIN
besiegt), ich verstehe nicht, wie es nur eine Zeile zurückgeben kann (LEFT JOIN
unter der Annahme ist ein LEFT OUTER JOIN
, die alle Zeilen in der linken Tabelle gibt nach w3 Schools).
Zweitens verstehe ich nicht die Semantik von s1.price < s2.price
. Ist das Wort „, wählen Sie alle Zeilen aus s2
, wo die Anweisung s1.price < s2.price
wahr ist (und wenn ja, dann w3 Schulen über Link ist mysql nicht wahr)? Ie LEFT JOIN
a LEFT INNER JOIN
?
Schließlich ist die WHERE s2.article IS NULL
macht absolut keinen Sinn für mich, da jeder Datensatz in der Tabelle hat eine article
Attribut (vor allem, da es keine zweideutigen 0000
Artikel ist).
Das 'where s2.article is null 'bedeutet, dass (unter der Annahme, dass das Feld nicht null ist) Details von s1 nur für Elemente gefunden werden, bei denen kein Preis höher ist als in der Tabelle. – TZHX