Valitse DB2: n väliaikataulukkoon

Sallikaa minun esitellä tämä kysymys siinä, että vaikka minulla on vahva tausta T-SQL: ssä, mutta olen silti vasta aloittelija, kun se tulee DB2: een.

Juurikysely näyttää suunnilleen tältä:

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 

Koska Fetch First X Rows ei ole sallittu alavalikoissa tai ammattiliittojen kanssa, tämä ei tule toimimaan. Koska rajoitamme uudelleen lähtöä, on järkevää rajoittaa syöttöä.

Luulen, että voin saavuttaa väärennetyn liiton syöttämällä alavalintani temp-taulukoihin ja palauttamalla sen sijaan sen tuloksen.

T-SQL: ssä voin luoda temp-taulukon lennossa tällaisella kyselyllä, miten tekisin sen DB2: ssa?

Select * Into #Temp From TableA 

Kuinka voin tehdä sen DB2: ssa? Vai pitäisikö minun luoda taulukko ennen tietojen lisäämistä siihen?

Kommentit

  • Mitä Db2-versiota käytät?
  • Voitteko sisällyttää myös lähteen, joka tukee lausuntoa: Tämä ei ole sallittua liitoksessa tai alivalikossa .

Vastaa

Ilman tilausta kyselylläsi ei ole mitään järkeä (IMHO). Mutta silti voit silti käyttää kyselyä, kuten:

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

Tein sinulle pienen esimerkin, jolla voit pelata osoitteessa Heiluta

Vastaa

Mielestäni tämä voidaan ratkaista käyttämällä CTE: tä molemmille valitsee.

Loin sinulle esimerkin liittymällä taulukoihin SYSIMB.TABLES ja SYSIBM.VIEWS. Haen molemmista vain viisi ensimmäistä riviä.

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; 

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *