Válassza a Táblázat a DB2-ben lehetőséget

Engedje meg, hogy előbbre tegyem ezt a kérdést annyiban, hogy miközben erős hátterem van a T-SQL-ben, de még mindig csak újonc vagyok, amikor a DB2-hez érkezik.

A gyökérlekérdezés nagyjából így néz ki:

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 

Mivel Fetch First X Rows nem engedélyezett alszelektumokban vagy szakszervezeteknél, ez nem fog működni. Mivel korlátozzuk a kimenetet, célszerű korlátozni a bemenetet.

Úgy gondolom, hamis uniót tudok elérni azáltal, hogy az alszelektumokat helyette temp táblákba töltem, és inkább a kimenetet adom vissza.

A T-SQL-ben menet közben létrehozhatok egy temp táblázatot egy ilyen lekérdezéssel, hogyan tenném ezt a DB2-ben?

Select * Into #Temp From TableA 

Hogyan tenném ezt a DB2-ben? Vagy létre kell hoznom a táblázatot, mielőtt adatokat illesztenék bele?

Megjegyzések

  • A Db2 melyik verzióját használja?
  • Kérem, adja meg azt a forrást is, amely az állítását alátámasztja: Ez nem engedélyezett egy szakszervezetben vagy al-kiválasztásban .

Válasz

A lekérdezés szerinti sorrend nélkül nincs értelme (IMHO). De ennek ellenére továbbra is használhat olyan lekérdezést, mint:

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

Készítettem neked egy kis példát, amellyel a következővel játszhatsz: / div> Hegedűs

Válasz

Úgy gondolom, hogy ez megoldható úgy, hogy CTE-t használunk mindkettőhöz kiválasztja.

Létrehoztam egy példát a SYSIMB.TABLES és a SYSIBM.VIEWS táblákhoz csatlakozva. Mindkettőből csak az első 5 sort kapom.

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; 

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük