Ergebnis 1 bis 5 von 5

Thema: Frage zu LeftJoin Abfrage

  1. #1
    Strece ist offline Neuer Benutzer
    Registriert seit
    29.09.2010
    Beiträge
    2

    Standard Frage zu LeftJoin Abfrage

    Guten Abend,

    ich habe da eine Frage zu einer gewissen LeftJoin Abfrage in MySQL, ich bekomm es einfach nicht hin die passende Ergebnismenge zu bekommen. Also erstmal ein wenig Vorwissen über meine Datenbankstruktur:

    Tabelle Position:
    Standort | Objekt_1 | Objekt_2 | Objekt_3 | Typ | Bemerkung

    Tabelle Verbindungen:
    Von_Standort | Von_1 | Von_2 | Von_3 | Nach_Standort | Nach_1 | Nach_2 | Nach_3

    Also in der Tabelle "Position" liegen meine Stammdaten, also alle verfügbaren Daten. In der Tabelle Verbindungen werden diese einzelnen Daten miteinandern verknüft, in meinem Fall Switch Verbindungen zu einer Raumdose oder von Switch zu Switch bzw. Raumdose zu Raumdose.

    Das ganze verwalte ich mit einem in Java geschriebenen Programm, dort benutze ich verschiedene Joins um die passenden Ergebnismengen zu bekommen. Nun zu meinem Problem. Ich möchte gerne durch einen Left Join alle Daten aus den Spalten Objekt_1 bis Objekt_3 bekommen, die sich noch nicht in der Tabelle Verbindungen befinden (in den Spalten: Von_1 bis Von_3 und Nach_1 bis Nach_3).

    Ein Beispiel:
    Wenn in der Tabelle Verbindungen folgendes steht:
    null;4507;3;4;null;31;C;12
    dann möchte ich meiner Ergebnismenge alle Daten aus der Position Tabelle bekommen, außer die oben im Beispiel genannten, da diese schon vergeben sind bzw. belegt.

    Mein Ansatz sieht derzeit so aus:
    Code:
    SELECT Position.Objekt_1, Position.Objekt_2, Position.Objekt_3, Verbindungen.Von_1, Verbindungen.Von_2, Verbindungen.Von_3, Verbindungen.Nach_1, Verbindungen.Nach_2, Verbindungen.Nach_3 From Position LEFT JOIN Verbindungen ON Position.Objekt_3 = Verbindungen.Von_3 AND Position.Objekt_3 = Verbindungen.Nach_3 AND Verbindungen.Von_2 = Position.Objekt_2 AND Verbindungen.Nach_2 = Position.Objekt_2 And Position.Objekt_1 = Verbindungen.Von_1 AND Position.Objekt_1 = Verbindungen.Nach_1 Where (Verbindungen.Von_3 is NULL OR Verbindungen.Nach_3 is NULL) AND Position.Objekt_1 = '4507';
    Problem daran ist, wenn jetzt z.B. der obere Datensatz folgendermaßen aussieht:
    null;31;C;12null;4507;3;4;

    Also vertauscht, so bekomme ich als Ergebnismenge immer noch die 4507;3;4, obwohl diese eigentlich belegt ist.

    Ich hoffe jemand kann mir dabei helfen.

    Mfg,

    Strece
    Geändert von Strece (30.09.2010 um 00:08 Uhr)

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von Strece Beitrag anzeigen
    Guten Abend,

    ich habe da eine Frage zu einer gewissen LeftJoin Abfrage in MySQL, ich bekomm es einfach nicht hin die passende Ergebnismenge zu bekommen. Also erstmal ein wenig Vorwissen über meine Datenbankstruktur:

    Tabelle Position:
    Standort | Objekt_1 | Objekt_2 | Objekt_3 | Typ | Bemerkung

    Tabelle Verbindungen:
    Von_Standort | Von_1 | Von_2 | Von_3 | Nach_Standort | Nach_1 | Nach_2 | Nach_3

    Also in der Tabelle "Position" liegen meine Stammdaten, also alle verfügbaren Daten. In der Tabelle Verbindungen werden diese einzelnen Daten miteinandern verknüft, in meinem Fall Switch Verbindungen zu einer Raumdose oder von Switch zu Switch bzw. Raumdose zu Raumdose.

    Das ganze verwalte ich mit einem in Java geschriebenen Programm, dort benutze ich verschiedene Joins um die passenden Ergebnismengen zu bekommen. Nun zu meinem Problem. Ich möchte gerne durch einen Left Join alle Daten aus den Spalten Objekt_1 bis Objekt_3 bekommen, die sich noch nicht in der Tabelle Verbindungen befinden (in den Spalten: Von_1 bis Von_3 und Nach_1 bis Nach_3).

    Ein Beispiel:
    Wenn in der Tabelle Verbindungen folgendes steht:
    null;4507;3;4;null;31;C;12
    dann möchte ich meiner Ergebnismenge alle Daten aus der Position Tabelle bekommen, außer die oben im Beispiel genannten, da diese schon vergeben sind bzw. belegt.

    Mein Ansatz sieht derzeit so aus:
    Code:
    SELECT Position.Objekt_1, Position.Objekt_2, Position.Objekt_3, Verbindungen.Von_1, Verbindungen.Von_2, Verbindungen.Von_3, Verbindungen.Nach_1, Verbindungen.Nach_2, Verbindungen.Nach_3 From Position LEFT JOIN Verbindungen ON Position.Objekt_3 = Verbindungen.Von_3 AND Position.Objekt_3 = Verbindungen.Nach_3 AND Verbindungen.Von_2 = Position.Objekt_2 AND Verbindungen.Nach_2 = Position.Objekt_2 And Position.Objekt_1 = Verbindungen.Von_1 AND Position.Objekt_1 = Verbindungen.Nach_1 Where (Verbindungen.Von_3 is NULL OR Verbindungen.Nach_3 is NULL) AND Position.Objekt_1 = '4507';
    Problem daran ist, wenn jetzt z.B. der obere Datensatz folgendermaßen aussieht:
    null;31;C;12null;4507;3;4;

    Also vertauscht, so bekomme ich als Ergebnismenge immer noch die 4507;3;4, obwohl diese eigentlich belegt ist.

    Ich hoffe jemand kann mir dabei helfen.

    Mfg,

    Strece
    Also, Punkt 1: MySQL ist hier OffTopic.

    Vielleicht hilft Dir dieser Schnellschuß weiter:

    Code:
    test=# select * from position;
     standort | objekt_1 | objekt_2 | objekt_3 | typ | bemerkung
    ----------+----------+----------+----------+-----+-----------
              | 4507     |          |          |     |
              | 4711     |          |          |     |
    (2 Zeilen)
    
    Zeit: 0,190 ms
    test=*# select * from verbindungen ;
     von_standort | von_1 | von_2 | von_3 | nach_standort | nach_1 | nach_2 | nach_3
    --------------+-------+-------+-------+---------------+--------+--------+--------
                  | 4507  | 3     | 4     |               | 31     | C      | 12
                  | 31    | C     | 12    |               | 4507   | 3      | 4
    (2 Zeilen)
    
    Zeit: 0,244 ms
    test=*# select * from position where objekt_1 not in (select greatest(von_1, von_2) from verbindungen);
     standort | objekt_1 | objekt_2 | objekt_3 | typ | bemerkung
    ----------+----------+----------+----------+-----+-----------
              | 4711     |          |          |     |
    (1 Zeile)
    
    Zeit: 0,341 ms
    test=*# insert into verbindungen values (null, '4711','1','2',null,null,null,null);
    INSERT 0 1
    Zeit: 0,217 ms
    test=*# select * from position where objekt_1 not in (select greatest(von_1, von_2) from verbindungen);
     standort | objekt_1 | objekt_2 | objekt_3 | typ | bemerkung
    ----------+----------+----------+----------+-----+-----------
    (0 Zeilen)
    
    Zeit: 0,339 ms
    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    ads
    ads ist gerade online Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.055

    Standard

    Habe das mal in das passende Forum verschoben.
    Ansonsten: Support für MySQL gibt es bei Oracle zu kaufen.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    Support für MySQL gibt es bei Oracle zu kaufen.
    ROFL

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    Strece ist offline Neuer Benutzer
    Registriert seit
    29.09.2010
    Beiträge
    2

    Standard

    Tut mir leid, habe völlig das PostrgeSQL Logo oben übersehen, habe bei Google nach Datenbank Foren gesucht und wohl nicht richtig geguckt.
    Naja habe aber eine Lösung gefunden.

    Mfg, Strece

Ähnliche Themen

  1. Frage zu Xml mit Postgresql
    Von Tuxist im Forum Programmierung
    Antworten: 0
    Letzter Beitrag: 12.07.2009, 12:07
  2. datediff frage
    Von azer im Forum SQL
    Antworten: 2
    Letzter Beitrag: 27.10.2008, 06:41
  3. Frage Frage zu Code
    Von buzz_lightzyear im Forum PL/pgSQL
    Antworten: 6
    Letzter Beitrag: 20.09.2008, 14:48
  4. Newbie-Frage zu einer Abfrage
    Von jennix im Forum SQL
    Antworten: 2
    Letzter Beitrag: 26.11.2007, 21:25
  5. Frage zu FAQs
    Von studilm im Forum Allgemeines
    Antworten: 3
    Letzter Beitrag: 13.09.2006, 10:52

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum