T-SQL equivalente a Python Pandas Concatenate

Oct 24 2020

Tenho algumas tabelas que gostaria de mesclar de maneira semelhante ao Python Pandas Concatenate . Não quero replicar as informações porque são muito grandes. Eu gostaria de ter um VIEWcomportamento semelhante. Deixe-me ilustrar com um exemplo falso que, tanto quanto eu sei, não funcionaria, mas apenas para explicar corretamente o que eu gostaria de alcançar.

Digamos que tenho estas duas tabelas:

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

Onde a, b, csão equivalentes, mas contêm dados diferentes. dexiste em table_1mas não em table_2e eexiste em, table_2mas não em table_1.

As tabelas não contêm nenhum dado comum. Ou seja, um JOINem qualquer campo traria resultado zero.

Eu gostaria de ser capaz de fazer o seguinte (ou algo equivalente. Eu sei que o que estou mostrando não é factível):

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

De forma que se eu correr:

SELECT * FROM MyUnion;

E obteria algo como ( 1e Onesão apenas preenchimentos representando um número ou string genérico):

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

Existe alguma maneira de fazer algo assim sem duplicar os dados? (ou seja, criando outra mesa com tudo)

Obrigado!

Respostas

7 ypercubeᵀᴹ Oct 23 2020 at 22:35

Algo assim?:

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 ;