Låt mig inleda den här frågan så att jag har en stark bakgrund i T-SQL men jag är fortfarande bara en nybörjare när det kommer till DB2.
Rotfrågan ser ungefär så här ut:
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
Eftersom Fetch First X Rows
är inte tillåtet i underval eller med fackföreningar, det här fungerar inte. Eftersom vi begränsar produktionen är det vettigt att begränsa ingången.
Jag tror att jag kan uppnå en falsk union genom att mata in mina underval i temp-tabeller istället och returnera utdata istället.
I T-SQL kan jag skapa en temp-tabell i farten med en sådan fråga hur skulle jag göra det i DB2?
Select * Into #Temp From TableA
Hur skulle jag göra det i DB2? Eller skulle jag behöva skapa tabellen innan jag infogade data i den?
Kommentarer
- Vilken version av Db2 använder du?
- Kan du också ta med källan som säkerhetskopierar ditt uttalande: Detta är inte tillåtet i en fackförening eller underval .
Svar
Utan en beställning av din fråga är det inte riktigt meningsfullt (IMHO). Men ändå kan du fortfarande använda en fråga som:
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 ) ;
Jag gjorde ett litet exempel för dig att spela med på Fiddle
Answer
Jag tror att detta kan lösas genom att använda en CTE för var och en av de två väljer.
Jag skapade ett exempel för dig genom att gå med i tabellerna SYSIMB.TABLES och SYSIBM.VIEWS. Från båda hämtar jag bara de första 5 raderna.
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;