Vyberte možnost Do dočasné tabulky v produktu DB2

Dovolte mi předmluvu k této otázce, protože i když mám silné zázemí v T-SQL, ale jsem stále jen nováček, když jde o DB2.

Kořenový dotaz vypadá zhruba takto:

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 

Protože Fetch First X Rows není povolen v dílčích výběrech nebo v odborech, to nebude fungovat. Protože omezujeme výstup, má smysl omezit vstup.

Myslím, že mohu dosáhnout falešného spojení tím, že místo toho vložím své podvýběry do dočasných tabulek a místo toho vrátím tento výstup.

V T-SQL mohu za běhu vytvořit dočasnou tabulku s dotazem, jako je tento, jak bych to udělal v DB2?

Select * Into #Temp From TableA 

Jak bych to udělal v DB2? Nebo musím před vložením dat do ní vytvořit tabulku?

Komentáře

  • Jakou verzi Db2 používáte?
  • Můžete prosím uvést také zdroj, který zálohuje vaše prohlášení: Toto není povoleno v unii nebo dílčím výběru .

odpověď

Bez objednávky podle vašeho dotazu nemá smysl (IMHO). Stále však můžete použít dotaz jako:

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

Vytvořil jsem pro vás malý příklad, se kterým si můžete zahrát na Fiddle

Odpověď

Myslím, že to lze vyřešit použitím CTE pro každou ze dvou vybere.

Vytvořil jsem pro vás příklad spojením tabulek SYSIMB.TABLES a SYSIBM.VIEWS. Z obou načítám pouze prvních 5 řádků.

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; 

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *