Я возвращаю результат 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.
Я бы хотел убедиться, что нет лучшего способа сделать это. Коллега упомянул об использовании псевдонимов для удаления дублирующих пунктов, но не уверен, как это могло бы чего-то добиться.
Это необходимо, или есть лучший способ?