Как создать новую таблицу из нескольких вложенных операторов соединения? - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь создать новую таблицу из нескольких вложенных соединений, но получаю сообщение об ошибке:

Incorrect syntax near ')'.

Это оператор соединения:

select * 
FROM table1
    LEFT JOIN table2
        ON table1.col1 = table2.col1
    FULL OUTER JOIN table3
        ON table3.col1 = table1.col1 
        AND table3.date >= '2017-10-01'

Вот как япытаюсь создать таблицу:

select * into newtable from (

select * 
    FROM table1
        LEFT JOIN table2
            ON table1.col1 = table2.col1
        FULL OUTER JOIN table3
            ON table3.col1 = table1.col1 
            AND table3.date >= '2017-10-01'
)

что я делаю не так в последнем корпусе?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Вам не нужен подзапрос вообще.Просто используйте into:

select * 
into newtable
FROM table1
    LEFT JOIN table2
        ON table1.col1 = table2.col1
    FULL OUTER JOIN table3
        ON table3.col1 = table1.col1 
        AND table3.date >= '2017-10-01';

Конечно, select * действительно не будет работать, потому что имена ваших столбцов должны быть уникальными.Но я предполагаю, что вы перечисляете их в своем реальном запросе.

Кроме того, фильтровать таблицы в full outer join сложно.Я обычно рекомендую для этого подзапрос.

0 голосов
/ 14 декабря 2018

Я бы использовал для этого CTE (Common Table Expression):

with
x as (
select * 
    FROM table1
        LEFT JOIN table2
            ON table1.col1 = table2.col1
        FULL OUTER JOIN table3
            ON table3.col1 = table1.col1 
            AND table3.date >= '2017-10-01'
)
select * into newtable from x
...