2016-06-20 19 views
0

DB2-Datenbank:die Anzahl der Zeilen in der kombinierten Abfrage Limiting UNION mit

select * 
from (SELECT table1.field1, ROW_NUMBER() OVER (ORDER BY table1.field1) AS RID FROM table1 
UNION 
SELECT table2.field1 
FROM table2, ROW_NUMBER() OVER (ORDER BY table2.field1) AS RID order by field1) as t where t.rid <= 20 

Above Abfrage gibt 40 Datensätze, müssen nur 20 Datensätze holen. Diese Abfrage versucht einfach, 20 Datensätze aus jeder Abfrage abzurufen, was insgesamt 40 Datensätze ergibt. Es kann vorkommen, dass Abfrage 1 0 Datensätze zurückgibt, Abfrage 2 jedoch 20 Zeilen. Schlagen Sie vor, wenn sich jemand einem ähnlichen Problem und einer ähnlichen Lösung gegenübersieht?

+0

Sie meinen etwas wie "LIMIT 20"? – gdros

+0

Haben Sie die Klauseln LIMIT oder FIRST 20 ROWS ONLY berücksichtigt? –

Antwort

0

Verwenden Sie einfach FETCH FIRST kombiniert mit verschachtelten CTEs. Dies wird bis zu zwanzig jede Tabelle holen, um die Zeilen von Tabelle 1 für insgesamt zwanzig Priorisierung:

SELECT b FROM 
(
SELECT * FROM 
(SELECT 1,table1.field1 FROM table1 ORDER BY 2 FETCH FIRST 20 ROWS ONLY) t1 
UNION 
SELECT * FROM 
(SELECT 2,table2.field1 FROM table2 ORDER BY 2 FETCH FIRST 20 ROWS ONLY) t2 
) tt(a,b) 
ORDER BY 1,2 
FETCH FIRST 20 ROWS ONLY 

Wenn Ihre Tabellen, nicht zu viele Zeilen enthalten können Sie einfach die innere CTE beseitigen + FIRST FETCH und lass die äußere SORT + FETCH FIRST die ganze Arbeit machen.

+0

Danke euch allen. Problem gelöst durch Hinzufügen von FETCH FIRST – Rkumar