1
下面是在hackerrank中提出的问题: 编写一个查询来查找按节点值排序的BST的节点类型。为每个节点输出以下内容之一:为什么下面的查询不能正确执行而没有别名?
根节点:如果节点是根节点。叶:如果节点是叶节点。 内:如果节点既不是根也不叶节点
表如下:
N P
1 2
3 2
6 8
9 8
2 5
5 NULL
预期输出是:其中我用
1 Leaf
2 Inner
3 Leaf
5 Root
6 Leaf
8 Inner
9 Leaf
查询来解决,这是:
SELECT N,
IF(P IS NULL,'Root',IF((SELECT COUNT(P)
FROM BST
WHERE P=B.N)>0,'Inner','Leaf'))
FROM BST AS B
ORDER BY N;
这给了我所需的输出,但如果我使用下面的查询它不..
SELECT N,
IF(P IS NULL,'Root',IF((SELECT COUNT(P)
FROM BST
WHERE P=BST.N)>0,'Inner','Leaf'))
FROM BST
ORDER BY N;
有人能解释我这背后的原因,把我所造的只是表本身的名称替换别名在这里的变化,那么它为什么不给所需的输出?
可以请您详细阐述,因为我无法正确地理解这一部分,或者你能不能给我提供的链接从中我能学到更多一点吗? – deb
@deb他意味着使用别名会触发相关子查询,因为它会提取外部表。 –
明白:)感谢您的回复(y) – deb