SQL 2003 이전의 SQL 재귀 (예 : SQL Server 2000)는 다소 추악합니다. 트리의 각 레벨에 대해 별도의 조인 문을 원래 테이블에 다시 써야합니다. 계층 구조의 수준 수가 고정되어 있다면 이와 비슷한 것을 작성할 수 있습니다.
create table #Hell (
parent int,
id int,
name varchar(30)
)
insert into #Hell values (NULL, 1, 'The Boss')
insert into #Hell values (1, 2, 'The Boss'' PA')
insert into #Hell values (1, 3, 'Production Director')
insert into #Hell values (3, 4, 'Jim''l Fixit')
select * from #Hell H1
inner join #Hell H2
ON H1.id=H2.parent
inner join #Hell H3
ON H2.id=H3.parent
WHERE H3.Id=4 --Find the boss for Jim
drop table #Hell
다행히 SQL Server 2005는 재귀 작업을 아주 쉽게 기록 할 수있는 와 공통 테이블식이있다. 참조하십시오 http://www.4guysfromrolla.com/webtech/071906-1.shtml
또한 데이터베이스에서 트리를 나타내는 다양한 방법을 알고 있어야합니다. 이 프리젠 테이션에서 SQL의 나무 슬라이드를 살펴보십시오. http://www.slideshare.net/billkarwin/sql-antipatterns-strike-back
출처
2009-08-03 14:45:18
pjp
"with"연산자는 실제로 "공통 테이블 식"(CTE)이라고하며 SQL Server 관련 확장은 아니지만 SQL : 2003 Standard의 일부입니다. –
나는 그것이 마이크로 소프트 일이라고 생각했지만 어떤 이유로 Postgres는 WITH RECURSIVE를 사용하는 CTE도 지원하고있다. – pjp