0

我有一张桌子

CREATE TABLE foo (text name, path ltree);

几个插入

INSERT INTO foo (name, path) VALUES ( 'Alice', 'ROOT.first.parent');
INSERT INTO foo (name, path) VALUES ( 'Bob', 'ROOT.second.parent');
INSERT INTO foo (name, path) VALUES ( 'Mistress', 'ROOT.third.parent');
INSERT INTO foo (name, path) VALUES ( 'Ted', 'ROOT.first.parent.child');
INSERT INTO foo (name, path) VALUES ( 'Carol', 'ROOT.second.parent.child');

现在我只想计算ROOT下的节点。我想我应该这样做:

SELECT count(path) FROM foo
WHERE path ~ 'ROOT.*{1}'

我希望 3 但我得到 0。有什么想法吗?

4

2 回答 2

2

你需要

WHERE path ~ 'ROOT.*{2}'

或者

WHERE path ~ 'ROOT.*.parent'

那是因为 'first.parent' 是两个标签,而不是一个。第二个 WHERE 子句查找以“父”结尾的路径,我认为这使您的意图更清晰。

您可以在此处查看 sqlfiddle 。

于 2014-02-01T02:08:29.343 回答
1

找到它!与所有事物一样,RTFM 并不是一个坏建议。捆绑的Subpath函数可以解决问题。计算偏移量 1、长度 1 的不同出现次数:

select count(distinct subpath(path, 1, 1))
from foo

3.

于 2014-02-03T22:58:30.327 回答