Abfrage von View mit Unterviews liefert keine Daten

DDL2024

Benutzer
Beiträge
10
Hallo,

ein View von mir greift auf andere Views zu. Sobald aber einer dieser Unterviews in einer Abfrage keine Daten auspuckt, bleibt der ganze View leer, obwohl ansonsten Daten vorhanden wären. Gibt es einen Weg, dass die anderen Daten trotzdem angezeigt werden und nur die Spalte mit dem Wert aus dem leeren Unterview frei bleibt?
NULL ist in allen Spalten des View und der Unterviews erlaubt, aber nicht überall in den zugrundeliegenden Tabellen. Ist das das Problem? (Lern mich grade erst ein in PostgreSQL...)

Vielen Dank und viele Grüße
Thea
 
Werbung:
Ich vermute dein Problem liegt in dem Join, mit dem du (vermutlich) mehrere Views zusammen führen willst. Es gibt verschiedene Arten von Joins die Daten aus einer (oder beider) Tabellen darstellen, wenn kein passender Datensatz in der anderen Tabelle vorliegt.
 
NULL ist in allen Spalten des View und der Unterviews erlaubt, aber nicht überall in den zugrundeliegenden Tabellen.
NULL ist nur in den Verknüpfungsspalten ein Problem. Das wird über geeignete Join Formulierung gelöst und das ist nicht spezifisch für Postgres, sondern in allen relationalen Datenbanksystemen so.
NULL erlaubt in allen Spalten der View ist etwas suspekt.
Eine View, die weiterverwendet wird und nicht als Endprodukt für einen Report oder so verwendet wird, würde allermeisten auch Primär- oder Fremdschlüsselfelder enthalten, erstere aufjeden Fall NOT NULL.
Andernfalls wäre schon fraglich, über welche Felder da überhaupt die Verknüpfung zwischen den Views läuft.
 
Hallo, und Danke für die Antworten. Die Views sind alle über Schlüssel verknüpft. Ich schau mir mal die Joins an... Ich habe ehrlich gesagt pauschal immer INNER JOINS verwendet, da mir das (ohne viel drüber nachzudenken 🙄) am logischsten erschien...
 
INNER JOIN kann ja auch richtig sein, muss aber nicht :) LEFT JOIN (bzw. RIGHT JOIN) ist auch sehr gängig und vermutlich schon die Lösung, wenn auf einer Seite theoretisch kein Inhalt stehen kann.
 
OK, hab den View neu aufgesetzt und die Joins einzeln überdacht. Manche haben gepasst, andere habe ich angepasst und einen ganz rausgeworfen. Jetzt sieht es schon mal ganz gut aus. Vielen Dank, ich habe wieder was gelernt.

Eine technische Verständnisfrage hätte ich noch:
Wie werden die verschiedenen Verbindungen im View abgearbeitet, wenn ich sozusagen eine "linke Tabelle" und mehrere "rechte Tabellen" habe. Werden die Verbindungen schrittweise in der Reihenfolge, wie sie im SQL-Befehl stehen abgeklappert, oder gleichzeitig betrachtet? (Ich hoffe, das ist verständlich...)
 
Werden die Verbindungen schrittweise in der Reihenfolge, wie sie im SQL-Befehl stehen abgeklappert, oder gleichzeitig betrachtet?
Konzeptionell solltest Du Dir das als "gleichzeitig" vorstellen.

Technisch ist ist es eher ein "nacheinander" als ein "gleichzeitig", aber das hat was mit der Implementierung zu tun - aber auch nicht zwingend in der Reihenfolge wie sie im SQL Befehl stehen.
 
Ich würde schon sagen nach einander. Wenn ich bei MSSQL in der Join Condition eine Spalte verwende, die "noch nicht gejoint wurde", weil die Tabelle erst in einer späteren Zeile gejoint wird, dann gibt er mir einen Fehler zurück. Ich weiß nicht genau, wie Postgres sich da verhält aber das schien mir immer logisch.
 
Werbung:
Was die Auflösung (bzw. Sichtbarkeit) von Namen angeht hast Du natürlich Recht.

Ich dachte die Frage bezieht sich auf die Art wie die Datenbank das tatsächlich "ausführt".
 
Zurück
Oben