Selectați Într-un tabel temporar în DB2

Permiteți-mi să prefac această întrebare în timp ce am un fundal puternic în T-SQL, dar sunt încă doar un începător când vine la DB2.

Interogarea rădăcină arată cam așa:

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 

Deoarece Fetch First X Rows nu este permis în subselecții sau în uniuni, acest lucru nu va funcționa. Deoarece limităm ieșirea, are sens să limităm intrarea.

Cred că pot realiza o uniune falsă alimentând subselecțiile mele în tabele temp și în schimb returnând acea ieșire.

În T-SQL, pot crea o tabelă temp cu o interogare de genul acesta, cum aș face asta în DB2?

Select * Into #Temp From TableA 

Cum aș face asta în DB2? Sau ar trebui să creez tabelul înainte de a insera date în acesta?

Comentarii

  • Ce versiune de Db2 folosești?
  • Puteți include, de asemenea, sursa care face backup pentru declarația dvs.: Acest lucru nu este permis într-o uniune sau sub-selectare .

Răspuns

Fără o comandă de interogare nu are sens (IMHO). Dar totuși puteți utiliza în continuare o interogare de genul:

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

Am făcut un mic exemplu pentru a vă juca la Lăutărie

Răspuns

Cred că acest lucru poate fi rezolvat folosind un CTE pentru fiecare dintre cele două selectează.

Am creat un exemplu pentru dvs. prin alăturarea tabelelor SYSIMB.TABLES și SYSIBM.VIEWS. Din ambele am preluat numai primele 5 rânduri.

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; 

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *