У меня есть запрос SQL Server, который использует некоторые CTE (общие выражения таблиц) . У него есть две таблицы, из которых он выбирает данные. Две таблицы идентичны по структуре, но не являются необходимыми данными. Сначала запрос будет выбран из table_a
, а если не выбрано ни одной строки, он будет выбран из table_b
. Запрос выглядит примерно так:
;WITH cte_a AS (
...
), cte_b AS (
...
)
SELECT *
FROM table_a
INNER JOIN cte_a ON condition_a
OR NOT EXISTS (
SELECT *
FROM table_b
INNER JOIN cte_b ON condition_b
)
Текущая проблема, с которой я столкнулся, заключается в том, что cte_b
всегда будет выполняться независимо от того, вернет ли table_a
какие-либо строки. Это не очень идеально для меня;Я хотел бы, чтобы cte_b
выполнялся тогда и только тогда, когда подзапрос для table_a
не возвращает строк.
Я попытался переместить cte_b
как раз перед подзапросом для table_b
как
;WITH cte_a AS (
...
)
SELECT *
FROM table_a
INNER JOIN cte_a ON condition_a
OR NOT EXISTS (
;WITH cte_b AS (
...
)
SELECT *
FROM table_b
INNER JOIN cte_b ON condition_b
)
Однако IDE жалуется. Я думаю, что это не тот способ, которым предполагается использовать CTE.