T-SQL эквивалент Python Pandas Concatenate

Oct 24 2020

У меня есть несколько таблиц, которые я хотел бы объединить аналогично тому, как это делает Python Pandas Concatenate . Я не хочу тиражировать информацию, потому что она довольно большая. Я хотел бы иметь VIEWподобное поведение. Позвольте мне проиллюстрировать фальшивым примером, который, насколько я знаю, не сработает, а просто чтобы правильно объяснить, чего я хотел бы достичь.

Допустим, у меня есть эти две таблицы:

CREATE TABLE table_1 (
    [a] [bigint] NOT NULL,
    [b] [bigint] NOT NULL,
    [c] [varchar] (32) NULL,
    [d] [bigint] NULL,
)
GO

CREATE TABLE table_2 (
    [a] [bigint] NOT NULL,
    [b] [bigint] NOT NULL,
    [c] [varchar] (32) NULL,
    [e] [varchar](256) NULL,
)
GO

Где a, b, cэквивалентны, но содержат разные данные. dсуществует, table_1но не внутри, table_2и eсуществует, table_2но не внутри table_1.

Таблицы не содержат общих данных. То есть a JOINна любом поле принесет нулевой результат.

Я хотел бы иметь возможность сделать следующее (или, скорее, что-то подобное. Я знаю, что то, что я показываю, невозможно):

CREATE VIEW MyUnion FROM(
SELECT * FROM table_1 UNION SELECT * FROM table_2) AS alldata;

Таким образом, если я бегу:

SELECT * FROM MyUnion;

И получил бы что-то вроде ( 1и Oneпросто заполнитель, представляющий общий номер или строку):

a       b       c       d       e
1       1       One     1       NULL
1       1       One     NULL    One

Есть ли способ сделать что-нибудь подобное без дублирования данных? (т.е. создание еще одной таблицы, содержащей все)

Спасибо!

Ответы

7 ypercubeᵀᴹ Oct 23 2020 at 22:35

Что-то вроде этого?:

CREATE VIEW MyUnion AS
SELECT
    a, b, c,
    d,
    CAST(NULL AS varchar(32)) AS e 
FROM table_1 
UNION ALL
SELECT
    a, b, c, 
    CAST(NULL AS bigint) AS d,
    e
FROM table_2 ;