1
나는 Likes (uid1이 uid2를 좋아한다)의 테이블을 가지고 있으며 특정 userID (uid
)를 갖기 때문에 그를 좋아하는 사람이나 그를 좋아하는 사람을 찾아야합니다. 등등.likes 계층 구조를 찾을 재귀 SQL
with recursive Hierarchy(uid, Level)
as
(
select
uid1 as uid, 1 as Level
from
Likes l
where
l.uid2 = 1 --parameter will go here
union all
select
l.uid1, lh.Level + 1
from
Likes l
inner join Hierarchy lh
on l.uid2 = lh.uid
where l.uid1 not in (select uid from Hierarchy) --this is wrong syntax in postgresql
)
select * from Hierarchy
테이블에서 다음 값을 주어진 예를 들어 따라서 (
2,1 (2 likes 1)
3,1 (3 likes 1)
4,1 (4 likes 1, 1 is popular)
3,4 (3 likes 4)
4,3 (4 likes 3)
이 좋아하는 계층 구조 원이 좋아, 나는 항목 만하지에게 이전 반복을 추가하고 싶어 할 때 문제가 나타납니다 NOT IN).
새로운 uids를 추가 할 때만 제한을 삽입 할 수 있습니까? 이 템플릿을 기반으로
짧은 RTFM 후 postgresql 설명서에서 설명을 찾았습니다. http://www.postgresql.org/docs/8.4/static/queries-with.html – Bg1987
해결책이있는 경우 게시하십시오. 대답은 단지 문서를 참조하지 마십시오. –
정확히 무엇이 질문입니까,주기적인 참조를 금지하는 "제약 조건"을 원하십니까? 삽입시 수행 할 수 있습니다. 제약으로도 할 수 있지만 아마도 카나리아 테이블이 추가로 필요할 것입니다. – wildplasser