Lido: MySQL5 Join und mehrfache gleiche Datensätze

Hallo an alle MySQL-Freaks,

ich stehe vor einer kleinen :eek: Herausforderung mit einer SQL-Abfrage über mehrere Tabellen. Ich denke ein Join wäre das richtige....

Meine DB-Struktur sieht so aus:

  
+---------------------+  +---------------------+  +---------------------+  
| tabelle invoice     |  | tabelle creditor    |  | tabelle debitor     |  
+---------------------+  +---------------------+  +---------------------+  
| invoice_id          |  | creditor_id         |  | debitor_id          |  
| invoice_creditor_id |  | creditor_longname   |  | debitor_firstname   |  
| invoice_debitor_id  |  | creditor_shortname  |  | debitor_lastname    |  
| usw...              |  | usw...              |  | usw...              |  
+---------------------+  + --------------------+  + --------------------+  

Meine Query sieht so aus:

  
$sql="SELECT DISTINCT invoice.invoice_id,  
                      invoice.invoice_creditor_id,  
                      invoice.invoice_debitor_id,  
                      creditor.creditor_longname,  
                      creditor.creditor_shortname,  
                      debitor.debitor_firstname,  
                      debitor.debitor_lastname  
        FROM invoice, creditor, debitor  
    ORDER BY invoice.invoice_id ASC;";  

Das Resultat sieht so aus:

  
+------------+---------------------+--------------------+--------  
| invoice_id | invoice_creditor_id | invoice_debitor_id | usw...  
+------------+---------------------+--------------------+--------  
| 2          | 2                   | 1                  | usw...  
+------------+---------------------+--------------------+--------  
| 2          | 2                   | 1                  | usw...  
+------------+---------------------+--------------------+--------  
| usw...     |                     |                    |  
+------------+---------------------+--------------------+--------  

Das Problem: Die obige Query liefert mir alle Werte mehrfach (kartesiches Produkt). Ich möchte eine Abfrage erstellen die mir obiges Resultat OHNE doppelte bzw. mehrfache einträge liefert.

Frage: Wie muss dann meine Query lauten, damit jeder Datensatz nur EINMAL auftaucht?

Auf eure Antworten freue ich mich jetzt schon!

  1. Hallo,

      
    SELECT DISTINCT  
        invoice.invoice_id,  
        [...] -- Spaltenliste, sehr erfreulich!  
              -- viel zu oft sieht man hier SELECT *  
    FROM  
        invoice,  
        creditor,  
        debitor  
    ORDER BY  
        invoice.invoice_id ASC;";  
    
    

    Das Problem: Die obige Query liefert mir alle Werte mehrfach (kartesiches Produkt). Ich möchte eine Abfrage erstellen die mir obiges Resultat OHNE doppelte bzw. mehrfache einträge liefert.

    wir haben hier zwei Artikel, die die Grundlagen von Joins vermitteln:

    - Einführung in Joins
      - Fortgeschrittene Jointechniken

    und freuen uns über Rückmeldungen, auch über Verbesserungsvorschläge.

    Freundliche Grüße

    Vinzenz