Seite 1 von 1

[GELÖST] Doppeltes LEFT OUTER JOIN

Verfasst: Fr 8. Mär 2013, 20:57
von wartburgritter
Meine Projektdatenbank wächst und nun stehe mal wieder vor einem Problem. In Idiotenlaiensprache würde ich sagen, ich will ein doppeltes LEFT OUTER JOIN machen, sozusagen über zwei Tabellen, sonst hab ich nur die ID in der Abfrage. Ich versuche mal das vereinfacht zu erläutern. Hab dazu die Abragen meiner Tabellen stark vereinfach hier eingefügt. Evtl. kann mir ja jemand helfen oder einen Tip geben wo ich mich schlau machen kann.

Ich habe eine Tabelle Projektliste, und einige Spalten verweisen auf andere Tabellen. Eine einfache Abfrage sieht so aus:

SELECT
"Ort"."Ort" AS "_____Ort_____",
"Projektliste"."ProjektBezeichnung" AS "ProjektBezeichnung",
"Projektliste"."ProjektArchivNummer" AS "PrjArchivNr"

FROM
{ OJ "Projektliste"
LEFT OUTER JOIN "Ort" ON "Projektliste"."OrtID" = "Ort"."ID"
}

ORDER BY
"Ort" ASC,
"ProjektBezeichnung" ASC

So weit so gut nichts besonderes. Habe weiterhin eine Tabelle Projektfirmen in der ich den Projekten Firmen zuordne. Die Firmen stehen aber wieder in einer weiteren Tabelle. Eine einfache Abfrage der Projektfirmen sieht so aus:

SELECT
"Firmen"."Firmenname" AS "___Firemenname___",
"Projektliste"."ProjektBezeichnung" AS "__ProjektBezeichnung__"

FROM
{ OJ "Projektfirmen"
LEFT OUTER JOIN "Firmen" ON "Projektfirmen"."FirmaID" = "Firmen"."ID"
LEFT OUTER JOIN "Projektliste" ON "Projektfirmen"."ProjektID" = "Projektliste"."ID"
}

ORDER BY
"Firmenname" ASC,
"ProjektBezeichnung" ASC

Soweit auch gut. Dort habe ich aber nur die zugeordneten Firmen drin. Nun möchte ich eine Projektliste ALLER Projekte mit Firmen haben (auch wenn einem Projekt keine Firma oder mehrere Firmen zugeordnet sind). Basis muss ja dann die Projektliste sein. Folgende Abfrage liefert mir die FirmenID in der Abfrage, ich will natürlich nicht die ID sondern den Namen stehen haben, der steht dann aber "noch eine Tabelle weiter".

SELECT
"Ort"."Ort" AS "_____Ort_____",
"Projektliste"."ProjektBezeichnung" AS "ProjektBezeichnung",
"Projektliste"."ProjektArchivNummer" AS "PrjArchivNr",
"Projektfirmen"."FirmaID" AS "___Firemenid___"

FROM
{ OJ "Projektliste"
LEFT OUTER JOIN "Ort" ON "Projektliste"."OrtID" = "Ort"."ID"
LEFT OUTER JOIN "Projektfirmen" ON "Projektliste"."ID" = "Projektfirmen"."ProjektID"
}

ORDER BY
"Ort" ASC,
"ProjektBezeichnung" ASC

Also nun die Gretchenfrage. Wie bekomme ich den Firmennamen anstatt der FirmaID in meine Projektlistenabfrage? Schwierig, schwierig, sieht überhaupt jemand durch was ich will. Hatte letztens einen aufden Kopf stehenden Smilie der würde grad passen. :)

gruss bernd

Re: Doppeltes LEFT OUTER JOIN

Verfasst: Fr 8. Mär 2013, 21:20
von RobertG
Hallo Bernd,

Code: Alles auswählen

SELECT
"Ort"."Ort" AS "_____Ort_____",
"Projektliste"."ProjektBezeichnung" AS "ProjektBezeichnung",
"Projektliste"."ProjektArchivNummer" AS "PrjArchivNr",
"Projektfirmen"."FirmaID" AS "___Firemenid___",
"Firmen"."Firmenname" AS "___Firemenname___"

FROM
"Projektliste"
LEFT JOIN "Ort" ON "Projektliste"."OrtID" = "Ort"."ID"
LEFT JOIN "Projektfirmen" ON "Projektliste"."ID" = "Projektfirmen"."ProjektID"
LEFT JOIN "Firmen" ON "Projektfirmen"."FirmaID" = "Firmen"."ID" 

ORDER BY
"Ort" ASC,
"ProjektBezeichnung" ASC
Vielleicht so mit 3 Left Joins?

Gruß

Robert

Re: Doppeltes LEFT OUTER JOIN

Verfasst: Fr 8. Mär 2013, 21:51
von wartburgritter
:D :D :D

Hab die Abfrage einfach nur kopiert und er zeigt GENAU an was ich brauche. Es gab nicht mal einen SQL-Fehler, nix sofort die Abfrageerbebnisse angezeigt mit NAMEN. Das gibt mir die Idee wie es funktioniert. So werd mir den Code mal ansehen und versuchen in die reele Struktur meiner DB zu integrieren, in der bspw. noch eine Projektaufgabe und weiter Elemente hinzukommen.

gruss bernd

ps. musste grad sofort antworten :) :) :)

Re: [GELÖST] Doppeltes LEFT OUTER JOIN

Verfasst: Fr 8. Mär 2013, 23:05
von wartburgritter
Das gibt mal ein ganz klares gelöst. Soeben in meine Struktur integriert. Es werden sogar schön die projekte mit mehreren firmen mehrmals angezeigt. So nun muss ich meine Daten abfüllen. Hab gerade noch ne idee bekommen, aber da gibt es einen extra thread.

gruss bernd