Знам, че в SQL Server може да се използва клауза SELECT без клауза FROM и да се създаде таблица с един ред и една колона
SELECT 1 AS n;
Но аз просто се чудех, възможно ли е да се използва SELECT клауза без клауза FROM, за да се създаде
таблица с една колона и няколко реда
таблица с няколко колони и един ред
таблица с няколко колони и няколко реда
Опитах много комбинации като
SELECT VALUES(1, 2) AS tableName(n, m);
без успех.
Отговори:
3 за отговор № 1Можете да го направите с CTE и да използвате union
(Използвайте union all
ако искате да покажете дубликати)
Rextester проба за всичките три сценария
Една колона и няколко реда
with tbl1(id) as (select 1 union all select 2) select * from tbl1;
Един ред и няколко колони
with tbl2(id,name) as (select 1,"A") select * from tbl2;
Няколко колони и няколко реда
with tbl3(id,name) as (select 1,"A" union all select 2,"B") select * from tbl3;
2 за отговор № 2
-- One column, multiple rows.
select 1 as ColumnName union all select 2; -- Without FROM;
select * from ( values ( 1 ), ( 2 ) ) as Placeholder( ColumnName ); -- With FROM.
-- Multiple columns, one row.
select 1 as TheQuestion, 42 as TheAnswer; -- Without FROM.
select * from ( values ( 1, 42 ) ) as Placeholder( TheQuestion, TheAnswer ); -- With FROM.
-- Multiple columns and multiple rows.
select 1 as TheQuestion, 42 as TheAnswer union all select 1492, 12; -- Without FROM.
select * from ( values ( 1, 2 ), ( 2, 4 ) ) as Placeholder( Column1, Column2 ); -- With FROM.
1 за отговор № 3
Можете да направите всичко това с помощта UNION
ключова дума
create table tablename as select 1 as n,3 as m union select 2 as n,3 as m
В Oracle ще бъде двойно:
create table tablename as select 1 as n,3 as m from dual union select 2 as n,3 as m from dual
1 за отговор № 4
Можете да използвате оператора на UNION:
CREATE TABLE AS SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
Операторът на UNION избира по подразбиране само отделни стойности. За да позволите дублиране на стойности, можете да използвате UNION ALL.
Имената на графите в серията от резултати обикновено са равни на имената на колоните в първия SELECT израз в UNION.
1 за отговор № 5
Опитайте тази:
--1) a table with one column and multiple rows
select * into tmptable0 from(
select "row1col1" as v1
union all
select "row2col1" as v1
) tmp
--2) a table with multiple columns and one row
select "row1col1" as v1, "row1col2" as v2 into tmptable1
--3) a table with multiple columns and multiple rows
select * into tmptable2 from(
select "row1col1" as v1, "row1col2" as v2
union all
select "row2col1" as v2, "row2col2" as v2
) tmp