Hallo,
und es geht doch:
Gegeben sei folgende Tabelle:
SQL-Code:
create table tabelle_a_b
(
spalte_a int,
spalte_b int)
mit folgendem Inhalt:
SQL-Code:
insert into tabelle_a_b values(100,110);
insert into tabelle_a_b values(200,220);
insert into tabelle_a_b values(1396000,1396010);
Zuerst ermitteln wir den höchsten Wert aus Tabelle_a_b:
select max(greatest(spalte_a,spalte_b)) as Max_Spalte from tabelle_a_b
und erstellen uns nun eine Level-Abfrage aus diesem Ergebnis:
SQL-Code:
SELECT LEVEL l FROM dual CONNECT BY LEVEL < = (
select max(greatest(spalte_a,spalte_b)) as Max_Spalte from tabelle_a_b
)
Nun müssen wir dieses Ergebnis noch mit Tabelle_a_b verbinden:
SQL-Code:
select l from (
SELECT LEVEL l FROM dual CONNECT BY LEVEL < = (
select max(greatest(spalte_a,spalte_b)) as Max_Spalte from tabelle_a_b
)
) Tally, tabelle_a_b
where Tally.L between tabelle_a_b.Spalte_A and tabelle_a_b.Spalte_B
Als Ergebnis bekommen wir:
100
101
102
103
104
105
106
107
108
109
110
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
1396000
1396001
1396002
1396003
1396004
1396005
1396006
1396007
1396008
1396009
1396010
Mit dieser Verfahrensweise benötigen wir keine eigene Tabelle in der Datenbank, bei der wir immer sicherstellen müssen, dass sie auch alle ggfls. erforderlichen Werte enthält.
Hoffe, das Ergebnis entspricht der im ersten Post genannten Fragestellung.