【发布时间】:2016-04-21 03:21:06
【问题描述】:
在数据库中,有一个表叫category:
CREATE TABLE category(
category_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
parent INT DEFAULT NULL
);
创建它是为了制作相邻列表模型树。以下是当前表格内的内容:
在这个例子中(你可以在底部找到源链接),下面的sql代码用于获取表中的“叶”元素,“叶”元素是表中没有的行让任何其他行在“父”列中使用它们的“category_id”。运行了以下代码:
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)是一个“叶”元素。
问题:为什么那个 sql 代码在逻辑上会给出这个结果?我很高兴它确实如此,因为它是我所需要的,但我无法理解它背后的原因。
示例来源:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/
【问题讨论】:
-
Outer joins和null检查是查看表中是否存在记录的常见模式,在这种情况下检查category_id是否为parent。非常类似于使用not exists或not in。
标签: mysql sql tree adjacency-list