Oracle : Joins der etwas anderen Art

AlexD1979

Erfahrenes Mitglied
Hallo,
An diesem Join beiße ich mir noch die Zähne aus... vielleicht kann mir da einer von euch weiterhelfen:
Bisher hat dieser SQL super funktioniert.
Code:
SELECT distinct a.transporter_id AS obj_id,a.comp_name,a.contact_person,a.plz,a.city from tdb_transporter a 
INNER JOIN tdb_trip b ON a.transporter_id = b.transporter_id where b.ta_id = 1

Nun habe ich das Feld ta_id aus der Tabelle b entfernt, da ich eine 1:n Verknüfung an dieser Stelle brauche. ICh habe also eine weitere Tabelle, die folgendermaßen Ergebnisse liefert
Code:
select * from object_pair where OBJ_TYPE1=-3802 and obj_id2 = 0

Ergebnis:
 OBJ_ID1     OBJ_TYPE1     OBJ_TYPE2     OBJ_ID2     PAIR_FLAG     PAIR_ORDER    
 ----------  ------------  ------------  ----------  ------------  ------------- 
 0           -3802         -3806         0           0             (null)        
 1           -3802         -3806         0           0             (null)        
 2           -3802         -3806         0           0             (null)

Nun brauche ich das obj_id1 in der where Clause meines Ursprungs-SQL. Aber wie soll das gehen und geht das überhaupt ist erst mal die Frage?
 
Hallo,
ich verstehe deine Problembeschreibung nicht wirklich. Ich versuche mal eine allgemeine Erklärung zum Thema 1:n-Beziehung. Vielleicht ist dir damit geholfen:

1. Aufbau der Tabelle1
ID Integer - eindeutige Nr je Datensatz innerhalb der Tabelle
Artikel Char

2. Aufbau der Tabelle2
IDTabelle1 Integer - ID aus Tabelle1
Lieferdatum Datum
Liefermenge Integer

Nun sollen mit einer SQL-Abfrage zu einem Artikel alle Lieferungen abgefragt werden:
Code:
SELECT a.Artikel, b.Liefermenge
  FROM Tabelle1 a, Tabelle2 b
  WHERE a.ID = b.IDTabelle1 AND a.Artikel = "einArtikel"
Das Ergebnis ist ein Datensatz aus Tabelle1 und n Datensätze aus Tabelle2. Wichtig ist, dass die eindeutige ID aus Tabelle1 in die Tabelle2 im Feld IDTabelle1 eingetragen wird. Mehr ist für eine 1:n-Beziehung nicht notwendig.
 
Sorry, aber ich habe nicht die Ahnung, wie ich weitermachen muss... alle Versuche sind bisher gescheitert

Code:
SELECT distinct a.transporter_id AS obj_id,
                a.comp_name,
                a.contact_person,
                a.plz,a.city 

        from tdb_transporter a 
        INNER JOIN tdb_trip b ON 
        a.transporter_id = b.transporter_id 
        where (b.FROM_COUNTRY = 0 or b.TO_COUNTRY = 0) 
        and b.ta_id = 1

Code:
select obj_id1 from object_pair 
                                where obj_type1 = -3802 
                                and obj_id2 = 1
Wie kann ich diese beiden SQLs verbinden? Und zwar muss der zweite SQL an der Stelle greifen wo steht ... and b.ta_id = 1 ...

Also erster SQL soll mir die obj_ids liefern, bei denen die Bedingungen erfüllt sind. Nun ist im ersten SQL noch die Bedingung ta_id=1 .. das trifft nicht mehr zu, da diese nun in einer weiteren Tabelle gespeicht sind, die mit dem zweiten SQL abgefragt sind. Wie kann ich das nun verbinden, damit ich nur noch einen sQL habe um diese Abfrage auszführen? irgendwie mit in ( Selelect) oder so?
 
Hallo,
der 1. Satz aus meiner ersten Antwort ist leider noch immer gültig. Aber, ist folgendes richtig:
- Du hast 3 Tabellen.
- In Tabelle 1 (tdb_transporter) und 2 (tdb_trip) gibt es jeweils ein Feld transporter_id, über welches die beiden Tabellen verbunden sind.
- die 3. Tabelle (object_pair) soll über das Feld obj_id1 mit Tabelle 1 oder 2 verbunden werden.
Aber womit?
Kannst du die Datenfelder für die Beziehungen zwischen allen 3 Tabellen einmal beschreiben (Name und Typ je Tabelle). Vielleicht mit ein paar Beispielen von Datensätzen, sodass die Abfrage zumindest einen Datesatz ausgeben muss.

Grundsätzlich ist zu sagen, dass es kein Problem ist, mit SQL in einer 1:n Beziehung Abfragen zu realisuieren, wenn das Datenbankdesign in Ordnung ist.
 
Hallo,
nun werd` ich aber neugierig! Du hast scheinbar die Lösung gefunden (weil Thema auf beantwortet gesetzt) - dürfen wir wissen wie die aussieht?
 

Neue Beiträge

Zurück