[Oracle] SQL Abfrage leere / fehelnde Zeilen hinzufügen

Du kannst die ID-Tablle auch über einen Trigger der Datentabelle steuern. Bei jeder Änderung (INSERT/DELETE) werden die Daten der ID-Tabelle angepasst.

@wraith01
Meien Lösung baut auf dem gleichen - ausser dass die IDs nach bedarf gefüllt werden und nicht einfach mal zig IDs reingeschrieben werden. Das Problem ist, wenn in - sagen wir mal 5 Jahren - die ID höher als die grösste ID deiner Tabelle wird, kein Schwein sich daran erinnert dass da eine Tabelle mit vielen Zahlen drin vorhanden ist.
 
Hi,
ja danke dir für die Antwort. Die ORDERN ist keine ID. Die stellt dar wann eine Order Bestellung eingegangen ist (wie eine Reinfolge). Ein Trigger geht leider nicht, da ich nur "Lese Rechte" auf dem Schema habe.

Beste Grüße,
 
*Bong* Ist ja Oracle....
Da kann man ja mittels dem folgenden Script leere imaginäre Zeilen erstellen
SQL:
-- 100 Zeilen mit dem Wert von 1 bis 100
select rownum id
  from dual
connect by rownum <= 100;

Nun müssen wir nur noch die Obergrenze dynamich gestalten und die Daten mit LEFT JOIN anhängen

etwa so müsste das nun gehen
SQL:
-- Alle Ordernr von 1 bis (grösste ordernr von Kunde) erstellen
WITH ordernr_list AS (
  SELECT 
    ROWNUM AS ordernr
  FROM
    dual,
    -- Die grösste ordernr auslesen
    (SELECT MAX(ordernr) AS max_ordernr FROM kunde) src
  CONNECT BY ROWNUM <= src.max_ordernr
)
-- Und diese Liste mit den Daten aus [kunde] verknüpfen und ausgeben
SELECT
    -- die ordernr aus der Liste nehmen
  ordernr_list.ordernr,
    -- Hier alle gewünschten Felder aus der Tabelle [kunde] auflisten
  kunde.name
FROM
  -- Resultat vom WITH-Bereich
  ordernr_list
  -- Datenquelle
  LEFT JOIN kunde
  ON ordernr_list.ordernr = kunde.ordernr
-- Alles in aufsteigend Reihenfolge bringen
ORDER BY 
  ordernr_list.ordernr;
 
Zuletzt bearbeitet von einem Moderator:
Zurück