2009-02-27 2 views
0

쿼리에 대해 XML 결과를 반환합니다.XML 경로 용 SQL Server

을 감안할 때 두 테이블 :이 내가 그것을 예상대로 작동하고 올바른 결과를 반환

SELECT 
    FooId, 
    FooName, 
    (
    SELECT 
     BarId, 
     FooId, 
     BarName 
    FROM 
     Bar 
    WHERE 
     Bar.FooId = Foo.FooId 
     AND Bar.BarName = 'SomeBar' 
    FOR XML PATH('Bar'), TYPE 
) 
FROM 
    Foo 
WHERE 
    Foo.FooName = 'SomeFoo' 
    AND Foo.FooId IN 
    (
    SELECT 
     Bar.FooId 
    FROM 
     Bar 
    WHERE 
     Bar.BarName = 'SomeBar' 
) 
FOR XML PATH('Foo'), TYPE 

:

**Foo** 
FooId int 
FooName varchar(10) 

**Bar** 
BarId int 
FooId int (FK) 
BarName varchar(10) 

내가 좋아하는 SELECT 문을 작성합니다. 나는 그것을 개발하는 동안 올바른 결과를 얻기 위해 where 절의 하위 선택과 중첩 된 선택 모두에서 필터링 절을 복제해야한다고 생각했습니다.

나는 이것을 수행하는 더 좋은 방법이 없는지 확인하고 싶습니다. 동료가 별칭을 사용하여 중복 절을 제거했지만 그 방법이 무엇인지를 잘 모르겠다 고 언급했습니다.

이것이 필요한가요? 아니면 더 좋은 방법이 있습니까?

답변

2

막대가있는 Foos 만 반환하고 XML에서 막대 노드를 유지해야한다고 가정하면 (즉, XML을 평평하게 만들기 때문에 조인이 작동하지 않음) 단순화 할 방법이 없습니다 이 정도. Bar 쿼리를 공통 테이블 식에 넣을 수는 있지만 그렇게하면 실제로 전체가 길어집니다.