Join zweier Tabellen trotz doppelter Sätze

derhenry

Fleissiger Benutzer
Beiträge
54
Hallo zusammen,

ich wäre Euch dankbar, wenn Ihr mir bei einem kleinen SQL-Problem helfen könntet:
In Tabelle A habe ich Daten, die ich um Informationen aus Tabelle B ergänzen möchte. In Tabelle B jedoch gibt es keinen eindeutigen Primärschlüssel und die Kombination aus möglichen Verknüpfungskriterien ist auch nicht eindeutig. Nehme ich - wie sonst immer - den left join, erhöhe ich die Gesamtdatensatzanzahl meines Ergebnisses, dabei soll die Menge von Tabelle A nicht überschritten werden.
Wie kann ich mir hier behelfen? Tabelle B kann ich nicht direkt bereinigen (höchstens durch einen View hirauf). Wahrscheinlich sind die doppelten Datensätze in B komplett identisch. Ist dem aber nicht so, soll einfach einer der beiden Sätze genommen werden - neher komme ich nicht an ein richtiges Ergebnis.

Danke für Eure Tipps!
 
Werbung:
Hallo zusammen,

ich wäre Euch dankbar, wenn Ihr mir bei einem kleinen SQL-Problem helfen könntet:
In Tabelle A habe ich Daten, die ich um Informationen aus Tabelle B ergänzen möchte. In Tabelle B jedoch gibt es keinen eindeutigen Primärschlüssel und die Kombination aus möglichen Verknüpfungskriterien ist auch nicht eindeutig. Nehme ich - wie sonst immer - den left join, erhöhe ich die Gesamtdatensatzanzahl meines Ergebnisses, dabei soll die Menge von Tabelle A nicht überschritten werden.
Wie kann ich mir hier behelfen? Tabelle B kann ich nicht direkt bereinigen (höchstens durch einen View hirauf). Wahrscheinlich sind die doppelten Datensätze in B komplett identisch. Ist dem aber nicht so, soll einfach einer der beiden Sätze genommen werden - neher komme ich nicht an ein richtiges Ergebnis.

Danke für Eure Tipps!


Du kannst einen Join auf das Resultat einer Abfrage machen, die dir eindeutige Werte aus B liefert. Dazu kannst Du z.B. Aggregationen verwenden, also max() oder so. Das ganze sieht dann etwa so aus:

select ... from a left join (select ... from b ...) foo on a.id=foo.id


Langfristig wäre es besser, das alles sauber zu bereinigen. Referentielle Integrität ist was feines - nutze es!
 
Vielen Dank für die Antwort. Das ist eine gute Idee. Dann werde ich um b herum erst einmal einen View bauen, der auf einen Datensatz pro Schlüssel reduziert. Kann ich da max() auch für Strings nehmen? Left join ist dann aber doch das Mittel der Wahl, wenn es mehr a's als b's gibt, oder? Wenn es kein b zu einem a gibt, sollen die entsprechenden Spalten <null> sein.
 
Werbung:
Zurück
Oben