我正在针对包含循环引用的表编写递归sql。 没问题!我读到你可以构建一个独特的路径来防止无限循环。现在我需要将列表过滤到链中的最后一条记录。我必须做错事。 -edit我正在为此示例添加更多记录,以便更清楚地说明为什么选择最长记录不起作用。
这是一个示例表:
create table strings (id int, string varchar(200));
insert into strings values (1, '1');
insert into strings values (2, '1,2');
insert into strings values (3, '1,2,3');
insert into strings values (4, '1,2,3,4');
insert into strings values (5, '5');
我的疑问:
select * from strings str1 where not exists
(
select * from strings str2
where str2.id <> str1.id
and str1.string || '%' like str2.string
)
我希望只获得最后的记录
| id | string |
|----|---------|
| 4 | 1,2,3,4 |
| 5 | 5 |
相反,我得到了所有
| id | string |
|----|---------|
| 1 | 1 |
| 2 | 1,2 |
| 3 | 1,2,3 |
| 4 | 1,2,3,4 |
| 5 | 5 |
链接到sql小提琴:http://sqlfiddle.com/#!15/7a974/1
答案 0 :(得分:0)
我的问题在于'LIKE'比较。
select * from strings str1
where not exists
(
select
*
from
strings str2
where
str2.id <> str1.id
and str2.string like str1.string || '%'
)