0

我正在返回查询的 xml 结果。

给定两个表:

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

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

我创建了一个选择语句,例如:

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 子句中的嵌套选择中复制过滤子句,以获得正确的结果。

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

这是必要的,还是有更好的方法?

4

1 回答 1

2

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

于 2009-02-27T20:25:16.387 回答