SQL Server For Xml路径

SQL Server For Xml路径,sql,sql-server,sqlxml,Sql,Sql Server,Sqlxml,我将返回查询的xml结果 给出两个表格: **Foo** FooId int FooName varchar(10) **Bar** BarId int FooId int (FK) BarName varchar(10) 我创建了一个select语句,如: SELECT FooId, FooName, ( SELECT BarId, FooId, BarName FROM Bar WHERE B

我将返回查询的xml结果

给出两个表格:

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

**Bar**
BarId int
FooId int (FK)
BarName varchar(10)
我创建了一个select语句,如:

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  
这与我期望的一样,并返回正确的结果。我意识到,在开发它的过程中,我需要复制where子句中的sub select和嵌套select中的筛选子句,以获得正确的结果

我想确定没有更好的方法来做这件事。一位同事提到使用别名删除重复的子句,但不确定这将如何实现


这是必要的,还是有更好的办法

假设您只想返回具有条形图的foo,并且需要在XML中保留条形图节点(即,连接将不起作用,因为它会使XML变平),那么没有办法将其简化很多。当然,您可以将Bar查询放入一个公共表表达式中,但如果这样做,整个过程实际上会变得更长