[MSSQL] JOIN Problem mit M zu N Beziehung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MSSQL] JOIN Problem mit M zu N Beziehung

    Ich habe ein Problem ein SQL Befehl abzuschicken, der mir folgendes Informationen in einer Zeile zurueckgibt:

    transaction.amount Kaeufer.name Verkaeufer.name

    Klingt einfach nicht wahr? Ich habe aber noch keine Loesung gefunden dazu. Die "Kaeufer"- und "Verkaeufer"-Daten kommen natuerlich aus der 'customer' Tabelle.

    Eine Transaktion kann also wowohl mehrere Kaeufer als auch Verkaeufer haben. Und zusaetzlich auch eine Kontaktperson, die auch in der "customer'-tabelle angelegt worden sind.

    Das Problem ist: Wenn ich eine Liste von ca 100 Transaktionen im Web ausgeben moechte, sind das momentan zuviele SQL-Abfragen.
    (1 fuer die Customertabelle, 100 fuer die Verkaueferdaten, 100 fuer die Kaeuferdaten, 100 fuer Kontaktpersonen).

    Aus diesem Grund moechte ich diese ganzen Daten in einer Abfrage abfragen koennen.

    Kann mir da jemand weiterhelfen?

    Beispieltabellen habe ich angefuegt:
    Code:
    CREATE TABLE transaction(
      id INT NOT NULL AUTO_INCREMENT,
      amount INT,
      PRIMARY KEY  (id)
    );
    
    CREATE TABLE customer(
      id INT NOT NULL AUTO_INCREMENT,
      name VARCHAR(200),
      PRIMARY KEY  (id)
    );
    
    CREATE TABLE customertransaction(
      customer_id INT NOT NULL,
      transaction_id INT NOT NULL,
      type VARCHAR(50),
      PRIMARY KEY  (customer_id, transaction_id)
    );

  • #2
    Das ist doch eine ganz einfache verknüpfung deiner drei tabellen über deine Schlüsselbeziehungen.

    SELECT
    cols
    FROM
    t0,
    t1,
    t2
    WHERE
    t0.id=t1.fk1_id
    and t2.id=t1.fk2_id
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Re: [MSSQL] JOIN Problem mit M zu N Beziehung

      Original geschrieben von Theoderich
      Ich habe ein Problem ein SQL Befehl abzuschicken, der mir folgendes Informationen in einer Zeile zurueckgibt:

      transaction.amount Kaeufer.name Verkaeufer.name
      Diese Formulierung passt nicht zu deinen Beispieltabellen. Sie suggeriert, dass du eine Tabelle namens Kaeufer und eine namens Verkaeufer hättest - dem scheint aber nicht so zu sein.

      Die "Kaeufer"- und "Verkaeufer"-Daten kommen natuerlich aus der 'customer' Tabelle.
      Und die Zuordnung soll wohl über customertransaction erfolgen.
      Soll deren Feld type beschreiben, ob es sich um einen Kunden oder Verkäufer handelt? Wenn ja, wieso zum Kuckuck ist es vom Typ VARCHAR?

      Eine Transaktion kann also wowohl mehrere Kaeufer als auch Verkaeufer haben. Und zusaetzlich auch eine Kontaktperson, die auch in der "customer'-tabelle angelegt worden sind.
      Dann dürfte es sich also kaum (sinnvoll) in einem Ergebnisdatensatz abbilden lassen - was deine Eingangsformulierung ebenfalls suggerierte.


      Aus diesem Grund moechte ich diese ganzen Daten in einer Abfrage abfragen koennen.
      transaction lesen,
      per JOIN mit customertransaction verknüpfen, ON gleiche Transaktions-ID,
      per weiterem JOIN mit customer verknüpfen, ON gleiche Customer-ID
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Re: Re: [MSSQL] JOIN Problem mit M zu N Beziehung


        Dann dürfte es sich also kaum (sinnvoll) in einem Ergebnisdatensatz abbilden lassen - was deine Eingangsformulierung ebenfalls suggerierte.
        Das ist gut moeglich, dass sich das nicht abbilden laesst.

        Um ein bischen Licht in meine vielleicht ein bischen schwammig formulierte Frage zu bringen, kann ich die Tabelle mal mit Werten fuellen...

        Code:
        CREATE TABLE transaction(
          id INT NOT NULL AUTO_INCREMENT,
          amount INT,
          PRIMARY KEY  (id)
        );
        
        CREATE TABLE customer(
          id INT NOT NULL AUTO_INCREMENT,
          name VARCHAR(200),
          PRIMARY KEY  (id)
        );
        
        CREATE TABLE customertransaction(
          customer_id INT NOT NULL,
          transaction_id INT NOT NULL,
          type VARCHAR(50),
          PRIMARY KEY  (customer_id, transaction_id)
        );
        Fuellen mit einem Beispielwert:
        Code:
        INSERT INTO
        customer ('name')
        VALUES ('hans'),
        ('peter');
        
        INSERT INTO
        transaction ('amount')
        VALUES ('500');
        
        
        INSERT INTO
        customertransaction ('customer_id', 'transaction_id', 'type')
        VALUES ('1', '1', 'kaeufer'),
        ('2', '1', 'verkaeufer');

        So, hoffentlich ist alles richtig.
        Hans hat also die id=1
        Peter hat die id=2.

        In der Transaktion ist Hans der Kaeufer, Peter ist der Verkaeufer.

        Die Frage ist nun, ist es moeglich einen SQL-Befehl abzuschicken, der mir eine Liste der Transaktionen zurueckbringt wie:

        | Transactions id | amount | Kaeufer Name | Verkaeufer Name |
        | 1 | 500 | hans | peter |
        .........

        Moeglicherweise ist das ja garnicht moeglich.
        Dann muesste ich jedoch eine Menge SQL abfragen hintereinander abschicken, um an diese Information zu gelangen.


        Diese Formulierung passt nicht zu deinen Beispieltabellen. Sie suggeriert, dass du eine Tabelle namens Kaeufer und eine namens Verkaeufer hättest - dem scheint aber nicht so zu sein.
        Ja, richtig. Eine Tabelle mit dem Namen Kaeufer oder Verkaeufer ist nicht vorhanden. Jedoch muesste ich die Customer-Daten in der Ergebnisabbildung als Kaeufer und Verkaeufer unterscheiden koennen. Ich hoffe meine Beispieldaten habe das ein bischen durchsichtiger gemacht.

        Und die Zuordnung soll wohl über customertransaction erfolgen.
        Soll deren Feld type beschreiben, ob es sich um einen Kunden oder Verkäufer handelt? Wenn ja, wieso zum Kuckuck ist es vom Typ VARCHAR?
        Es ist nur vom Typ VARCHAR, um die Frage hier zu vereinfachen. Es koennte natuerlich auch ein Integer sein. Hauptsache ist, dass hier entschieden wird, um bei dieser Transaction der Benutzer der Kaeufer, der Verkaeufer, oder eine Kontaktperson ist.


        Ich danke dir, dass Du dir schonmal fuer meine Frage Zeit genommen hast. Entschuldige, wenn ich mich zu ungenau war.


        Falls die Abfrage nicht moeglich ist:
        Habe ich moeglicherweise einen Design-Fehler in meinen Tabellen?
        Zuletzt geändert von Theoderich; 25.05.2006, 00:12.

        Kommentar

        Lädt...
        X