我有一张桌子
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.任何想法?
答案 0 :(得分:1)
你需要
WHERE path ~ 'ROOT.*{2}'
或
WHERE path ~ 'ROOT.*.parent'
那是因为'first.parent'是两个标签,而不是一个。第二个WHERE子句查找以'parent'结尾的路径,我认为这会使您的意图更清晰。
您可以看到sqlfiddle here。
答案 1 :(得分:1)
Fount it!与所有事情一样,RTFM并不是一个糟糕的建议。捆绑的子路径功能可以解决这个问题。计算偏移量1,长度1:
的不同出现次数select count(distinct subpath(path, 1, 1))
from foo
3