2009-02-27 16 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 

:私はのようなselect文を作成

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

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

は、2つのテーブルを考えます。私はそれを開発している間に、正しい結果を得るために、where句のサブ選択と入れ子選択の両方でフィルタリング句を複製する必要があることを認識しました。

私はこれを行うより良い方法がないことを確認したいと思います。同僚はエイリアスを使用して重複する句を削除すると述べましたが、それがどのように達成されるかはわかりません。

これが必要ですか、それとも良い方法がありますか?

答えて

2

バーがあるFoosだけを返し、XMLでBarノードを保持する必要があると仮定すると(つまり、XMLが平らになるので結合は機能しません)、単純化する方法はありませんこれほど多く。あなたは確かに、共通のテーブル式にバーのクエリを置くことができますが、実際にはそれを行うと全体が長くなります。