Как создать таблицу из результата запроса?

Я хочу создать новую таблицу из результата запроса в SSMS:

Результат запроса:

select table1.col1, table1.col2, table2.col3
from table1
inner join table2 on table1.col1 = table2.col1
order by col1 asc;

Как я могу создать новую таблицу из приведенного выше результата:

я пытался

select *
into new_table
from (
    select table1.col1, table1.col2, table2.col3
    from table1
    inner join table2 on table1.col1 = table2.col1
    order by col1 asc
);

я получил ошибку

Сообщение 102, уровень 15, состояние 1, строка 11 Неверный синтаксис рядом с символом ';'.

Спасибо

Вам нужен псевдоним, если вы используете подзапрос... однако вам не нужен подзапрос. Просто добавьте into new_table к вашему первому запросу.

Dale K 23.12.2020 09:20
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
71
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Использовать:

select *
into new_table
from (
    select table1.col1, table1.col2, table2.col3
    from table1
    inner join table2 on table1.col1 = table2.col1   
) s    -- alias here
order by col1 asc;  -- order by in the outermost query
-- tables by design are not ordered sets so the ORDER BY could be skipped

@DaleK В этом контексте это излишне, в сочетании с TOP это может иметь смысл

Lukasz Szozda 23.12.2020 09:26

Независимо от использования в Указание предложения ORDER BY не гарантирует, что строки будут вставлены в указанном порядке. Так избыточно по двум причинам :)

Dale K 23.12.2020 09:27

Самый простой способ будет

select table1.col1, table1.col2, table2.col3
Into new_table
from table1
inner join table2 on table1.col1 = table2.col1
Ответ принят как подходящий

У вас есть order by в вашем запросе — как будто вы думаете, что это имеет значение при создании таблицы. Таблицы SQL представляют собой неупорядоченные наборы, поэтому в целом order by бесполезен.

Есть два случая, когда order by имеет смысл. Один с TOP, а другой с столбцом идентификаторов. Это предполагает использование identity() для добавления столбца идентификаторов:

select identity(int) as id, table1.col1, table1.col2, table2.col3
into new_table
from table1 inner join
     table2
     on table1.col1 = table2.col1
order by col1 asc;

Если бы я использовал SQL Server и код T-SQL, я бы использовал временную таблицу для захвата набора результатов. Временная таблица удобна тем, что не требует предварительного определения схемы (как переменная таблицы). Temp Table получит ваш результирующий набор как есть и может быть запрошен после загрузки (в рамках вашей работы). Обратите внимание на синтаксис хэштега.

insert into #TempTable
select table1.col1, table1.col2, table2.col3
from table1
inner join table2 on table1.col1 = table2.col1
order by col1 asc;

Затем...

select col1,col2,col3 from #TempTable

Если вы не используете T-SQL или SQL Server, я полагаю, что другие языки SQL предлагают аналогичные функции.

Вот полезная статья: https://www.sqlshack.com/when-to-use-temporary-tables-vs-table-variables/

Другие вопросы по теме