MSSQL: Verknüpfung zwei Tabellen
-
Hallo zusammen,
ich arbeite gerade mit der MSSQL Datenbank und habe ein kleines Problem:
Ich möchte mir den Auftrag der mehrere Positionen hat anzeigen, bekomme jedoch als Ergebnis vier Datensätze angezeigt.select a.angebot from angebot a, angebotpos ap where a.angebot = 'E-10025' and ap.angebot = a.angebot;
Ergebnis bei MSSQL: 4 Datensätze
Ergebnis bei Oracle: 1 DatensatzIch könnte natürlich auch top 1 angeben, kann mir aber nicht vorstellen, dass das die ideale Lösung ist.
Eine weitere Möglichkeit wäre mit verschachtelten SQLs zu arbeiten, dass verschlechtert aber die Lesbarkeit und die Skalierbarkeit des SQLs.Ich habe mehrere Jahre mit der Oracle-Datenbank gearbeitet und wundere mich jetzt, dass die Unterschied MSSQL zu Oracle so enorm ist.
Hat jemand einen Vorschlag wie ich generell das Problem umgehen kann?
-
Ich verstehe deine Beschreibung nicht.
MSSQL macht hier genau das was Du willst.
Alle Datensätze wo a.angebot gleich 'E-10025' und ap.angebot gleich a.angebot ist
Ob das so ist weiß ich nicht.
MSSQL hat einen sehr guten Editor für die Datenbank.
Da kannst Du dir sogar einen Query zusammenklicken. Da werden dann auch automatisch die Joins gemacht.
-
Schau dir mal die Daten in a.ANGEBOT an.
-
Hallo Unix-Tom,
ich denke mein Problem liegt darin, dass ich Apfel mit Birnen vergleiche.
Etwas ausführlicher:
select * from angebot where angebot = 'E-10025'; Ergebnis: 1 Datensatz
select * from angebotpos where angebot = 'E-10025'; Ergebnis: 4 Datensätze
MSSQL:
select a.angebot from angebot a, angebotpos ap where a.angebot = 'E-10025' and ap.angebot = a.angebot; Ergebnis: 4 Datensätze
Oracle:
select a.angebot from angebot a, angebotpos ap where a.angebot = 'E-10025' and ap.angebot = a.angebot; Ergebnis: 1 Datensatz, weil ich die Datensätze explizit aus Tabelle a sehen möchte
Oracle:
select ap.angebot from angebot a, angebotpos ap where a.angebot = 'E-10025' and ap.angebot = a.angebot; Ergebnis: 4 Datensätze, weil ich die Datensätze explizit aus Tabelle ap sehen möchte
Mein Problem bei MSSQL kann ich folgendermaßen umgehen:
MSSQL:
select top 1 a.angebot from angebot a, angebotpos ap where a.angebot = 'E-10025' and ap.angebot = a.angebot; Ergebnis: 1 Datensatz
Mein Fazit: Obwohl ich in der MSSQL explizit sage, dass ich die Daten aus der Tabelle a sehen möchte (select a.angebot), in der physisch nur 1 Datensatz vorliegt, gibt mir MSSQL immer die gesamte, durch die joins ergebene Datenmenge zurück.
-
Hallo,
für sowas gibt's LEFT & RIGHT JOIN
LG
-
Hallo 12345,
ja es gibt die wirklich! Jedoch löse ich damit nicht mein Problem.select a.* from angebot as a left outer join angebotpos as ap on a.angebot = ap.angebot where a.angebot = 'E-10025'; Ergebnis: immer noch 4 Datensätze
Hat jemand eine Idee?
-
Hi 12345,
ich glaube du hast recht! So kriege ich nur einen Datensatz raus:select * from auftragpos ap left outer join auftrag a on ap.auftrag = a.auftrag where a.angebot = 'E-10025'; Ergebnis: 1 Datensatz
Ich glaube ich fange jetzt langsam zu verstehen.