In einer Datenbank zu verstehen, gibt es eine Tabelle mit dem Namen Kategorie:diese SQL-LEFT JOIN (mit IS NULL) Beispiel
CREATE TABLE category(
category_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
parent INT DEFAULT NULL
);
Es wurde geschaffen, eine Angrenzend Liste Modellbaum zu machen. Hier ist, was in der Tabelle ist derzeit:
In diesem Beispiel (Sie den Quelle-Link unten finden), der folgende SQL-Code verwendet wurde, die „Blatt“ Elemente in der Tabelle zu erhalten , wobei "leaf" -Elemente die Zeilen in der Tabelle sind, die keine andere Zeile hatten, verwenden Sie ihre "category_id" in der "parent" -Spalte. Der folgende Code ausgeführt wurde:
SELECT t1.name FROM
category AS t1 LEFT JOIN category as t2
ON t1.category_id = t2.parent
WHERE t2.category_id IS NULL;
Das Ergebnis des vorherigen SQL-Code gibt dieses Ergebnis:
Zum Beispiel gibt es keine Zeile in der Tabelle, die den Wert 3 innerhalb dem hat Übergeordnete Spalte, daher TUBE (mit category_id == 3) ist ein "Blatt" -Element.
FRAGE: Warum gab dieser SQL-Code logisch dieses Ergebnis? Ich bin froh, dass es das tut, weil es genau das ist, was ich brauchte, aber ich kann mich nicht mit den Gedanken dahinter befassen.
Quelle des Beispiels: http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/
'Outer-Joins' mit' Null'-Checks sind ein übliches Muster, um zu sehen, ob ein Datensatz in einer Tabelle existiert, in diesem Fall überprüft, ob die 'category_id' ein 'Elternteil' ist. Sehr ähnlich wie 'not exist' oder' not in'. – sgeddes