Я хочу создать новую таблицу из результата запроса в 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 Неверный синтаксис рядом с символом ';'.
Спасибо
Использовать:
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 это может иметь смысл
Независимо от использования в Указание предложения ORDER BY не гарантирует, что строки будут вставлены в указанном порядке. Так избыточно по двум причинам :)
Самый простой способ будет
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/
Вам нужен псевдоним, если вы используете подзапрос... однако вам не нужен подзапрос. Просто добавьте
into new_table
к вашему первому запросу.