다음 데이터를 필터링 할 수 있도록 쿼리를 구성하는 데 약간의 도움이 필요합니다.parentid가있는 테이블에서 자식 필터링
입니다Id ParentId Visible
=====================
5 null 1
6 5 1
, 숨겨진 노드의 모든 아이들이 반환되지해야합니다
Table: MyTree
Id ParentId Visible
=====================
1 null 0
2 1 1
3 2 1
4 3 1
5 null 1
6 5 1
나는 쿼리에서 다음과 같은 결과를 기대합니다. 더 중요한 것은 계층 구조의 깊이가 제한되지 않는다는 것입니다. 이제는 "2, 3 & 4를 visible = 0으로 설정하십시오."라고 대답하지 마십시오. 불가능하지 않은 이유는 ... 끔찍한 "레거시 시스템"을 수정하는 것과 같습니다.
내가 좋아하는 뭔가 생각 : 어떤 문법적인 실수
죄송
SELECT *
FROM MyTree m1
JOIN MyTree m2 ON m1.ParentId = m2.Id
WHERE m1.Visible = 1
AND (m1.ParentId IS NULL OR m2.Id IS NOT NULL)
그러나 그것은 단지 오른쪽 첫 번째 레벨을 필터링 할 것인가? 당신이 도울 수 있기를 바랍니다.
편집 : 제목을 완료했습니다. 이 서버는 새로운 MSSQL 2008 서버의 브랜드이지만 데이터베이스는 2000 호환 모드로 실행됩니다. SQL Server 2005+
에서
어떤 버전의 SQL Server가 있습니까? –
@ JohannesH - 당신이 성취하려는 것을 잘 모르겠다. –
내가 생각하는 대답은 SQL Server 2005 이상 (재귀 CTE를 수행 할 수 있음) 또는 SQL Server 2000 - (수행 할 수 없음)에 따라 크게 달라집니다. – AakashM