Вы путаете "табличные выражения" с "общими табличными выражениями", поэтому вы смешиваете их синтаксис в нечто, что не является допустимым SQL утверждением.
Обратите внимание на разницу, и решите, какой из них использовать:
Выражение таблицы (он же «производная таблица», «встроенное представление» и т. д. c.):
select *
from (
select ... -- my complex select #1 here
) a
join (
select ... -- my complex select #2 here
) b on a.column_a = b.column_b
Табличные выражения появляются в предложении FROM
и называются сразу после закрывающей скобки. Оператор SELECT
написан в начале.
Общее выражение таблицы (CTE):
with
a as (
select ... -- my complex select #1 here
),
b as (
select ... -- my complex select #2 here
)
select * from a join b on a.column_a = b.column_b
Как вы видите, общие выражения таблицы объявляются первыми, псевдонимы определяются перед открывающей скобкой и разделяются запятыми. Основное SELECT
написано в конце. Одним из преимуществ CTE является то, что вы можете использовать общие табличные выражения много раз, в последующих CTE и в окончательном / главном SELECT
.