В базе данных есть таблица называется категория:Понимание этого SQL LEFT JOIN (с IS NULL), например
CREATE TABLE category(
category_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
parent INT DEFAULT NULL
);
Он был создан, чтобы сделать смежный список Model Tree. Вот то, что находится внутри таблицы в настоящее время:
В этом примере (вы можете найти ссылку источника на дне), был использован следующий SQL-код для получения элементов «листа» в таблице , при этом элементы «leaf» являются строками в таблице, в которых не было другой строки, использующей свой «category_id» в столбце «parent». Следующий код был запущен:
SELECT t1.name FROM
category AS t1 LEFT JOIN category as t2
ON t1.category_id = t2.parent
WHERE t2.category_id IS NULL;
результат предыдущего кода SQL дает этот результат:
Например, не существует ни одна строка в таблице, которая имеет значение 3 внутри родительский столбец, поэтому TUBE (с category_id == 3) является элементом «leaf».
ВОПРОС: Почему этот код sql логически дал этот результат? Я рад, что это так, потому что это то, что мне было нужно, но я не могу окутать голову вокруг рассуждений.
источник например: http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/
«Внешние соединения» с проверками «null» - это общий шаблон, чтобы увидеть, существует ли запись в таблице, в этом случае проверяя, является ли 'category_id'' parent'. Очень похоже на использование 'not exist' или' not in'. – sgeddes