Seleziona Into a temp table in DB2

Fammi prefigurare questa domanda in quanto ho un forte background in T-SQL ma sono ancora solo un principiante quando arriva a DB2.

La query di root ha più o meno questo:

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 

Perché Fetch First X Rows non è consentito nelle sottoselezioni o con i sindacati, questo non funzionerà. Dato che stiamo limitando loutput, ha senso limitare linput.

Immagino di poter ottenere una falsa unione inserendo le mie subselect nelle tabelle temporanee e restituendo invece quelloutput.

In T-SQL, posso creare una tabella temporanea al volo con una query come questa, come potrei farlo in DB2?

Select * Into #Temp From TableA 

Come lo farei in DB2? O dovrei creare la tabella prima di inserirvi i dati?

Commenti

  • Quale versione di Db2 stai utilizzando?
  • Puoi includere anche la fonte che supporta la tua dichiarazione: Questo non è consentito in ununione o sottoselezione .

Risposta

Senza un ordine tramite la tua query non ha davvero senso (IMHO). Tuttavia, puoi comunque utilizzare una query come:

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 ) ; 

Ho creato un piccolo esempio con cui giocare su Fiddle

Risposta

Penso che questo possa essere risolto utilizzando un CTE per ciascuno dei due seleziona.

Ho creato un esempio per te unendo le tabelle SYSIMB.TABLES e SYSIBM.VIEWS. Da entrambi recupero solo le prime 5 righe.

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; 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *