Velg inn i en temp-tabell i DB2

La meg forhåndsinnføre dette spørsmålet i det mens jeg har sterk bakgrunn i T-SQL, men jeg er fortsatt bare en nybegynner når det kommer til DB2.

Rotsøket ser omtrent slik ut:

Select Col1, Col2, Col3 From ( Select A.Col1, B.Col2, B.Col3 From SchemaA.TableA as A Inner Join SchemaA.TableB as B On A.Id = B.ParentId Where A.Col2 = "TypeValue" Fetch First 5 Rows Only -- This is not allowed in a union or sub select Union Select A.Col1, B.Col2, B.Col3 From SchemaB.TableA as A Inner Join SchemaB.TableB as B On A.Id = B.ParentId Where A.Col2 = "TypeValue" Fetch First 5 Rows Only -- This is not allowed in a union or sub select ) as Hybrid 

Fordi Fetch First X Rows er ikke tillatt i undervalg eller med fagforeninger, dette kommer ikke til å fungere. Siden vi begrenser produksjonen, er det fornuftig å begrense innspillene.

Jeg regner med at jeg kan oppnå en falsk union ved å mate undervalgene mine i temp-tabeller i stedet og returnere den utgangen i stedet.

I T-SQL kan jeg lage en temp-tabell med en forespørsel som dette, hvordan ville jeg gjort det i DB2?

Select * Into #Temp From TableA 

Hvordan ville jeg gjort det i DB2? Eller må jeg opprette tabellen før jeg setter inn data i den?

Kommentarer

  • Hvilken versjon av Db2 bruker du?
  • Kan du også ta med kilden som sikkerhetskopierer uttalelsen din: Dette er ikke tillatt i en fagforening eller undervalg .

Svar

Uten en ordre fra spørringen din, er det ikke riktig (IMHO). Men likevel kan du fortsatt bruke et spørsmål som:

select * from ( select A.x from A order by x fetch first 2 rows only ) union all ( select B.x from B order by x fetch first 3 rows only ) ; 

Jeg laget et lite eksempel for deg å spille med på Fele

Svar

Jeg tror dette kan løses ved å bruke en CTE for hver av de to velger.

Jeg opprettet et eksempel for deg ved å bli med i tabellene SYSIMB.TABLES og SYSIBM.VIEWS. Fra begge henter jeg bare de første 5 radene.

WITH tables ( name ) AS (SELECT tab.name FROM sysibm.SYSTABLES tab FETCH FIRST 5 rows only ) , views ( name ) AS (SELECT vie.name FROM sysibm.SYSVIEWS vie FETCH FIRST 5 rows only ) SELECT name FROM tables UNION SELECT name FROM views; 

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *