我有一个使用某些CTEs (Common Table Expressions)的SQL Server查询。它有两个表可供选择数据。这两个表的结构相同,但不是必需的数据。该查询将首先从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的方式。