Jean-Max: (my)SQL-Abfrage über zwei Tabellen

Dies ist dem Jean-Max seine erste Datenbank-Frage!

Bounjoun alle,

Ich habe eine Datenbank 'kunden', welche eine Tabelle 'kunden' und eine weitere Tabelle 'rechnungen' enthält.

Die Tabelle 'kunden' enthält 13 Felder, unter anderem Kundennummer, Firmenname, Vorname, Nachname (der Ansprechpartner), Adresse, PLZ, Ort, usw.

Die Tabelle 'rechnungen' enthält 8 Felder, unter anderem Rechnungsnummer, Kundennummer (die mit der Tabelle 'kunden' übereinstimmt), Rechnungsdatum, Betrag, Währung, Zahlungsdatum (wenn bezahlt), Status (also offen oder bezahlt) und Anmerkungen (z.B. Zahlungsmoral unter aller Sau *g*).

Jetzt versuche ich folgendes abzufragen, hier erstmal Klartext: »Liste mir auf alle offenen Rechnungen des Kunden mit der Kundennummer x«. Nun das, was ich mir irgendwie zusammen gewurschtelt habe:

  
SELECT `kunden`.`Kundennummer` , `kunden`.`Firma` , `rechnungen`.`Rechnungsbetrag` , `rechnungen`.`Rechnungsdatum` , `rechnungen`.`Status`  
FROM `rechnungen` , `kunden`  
WHERE (  
(  
`kunden`.`Kundennummer` =4  
)  
AND (  
`rechnungen`.`Status` = 'offen'  
)  
)  

Ich erhalte aber alle Rechnungen, die den Status 'offen' haben, egal, ob sie vom Kunden 4 sind oder nicht... :(

Solele. Wenn das beantwortet ist, hätte ich noch die eine oder andere Frage...

Adiou.

--
Ich bin eigentlich ganz anders, aber ich komme so selten dazu. - Ödön von Horwáth
Ist Rudi Carrell Gott? Oder George Harrison Ford?
Ich bin faul und das ist gut so.
  1. Hi,

    Dies ist dem Jean-Max seine erste Datenbank-Frage!

    dem Jean-Max sein Weg sollte zu MySQL ihre Dokumentation über JOINs gehen. Und zu seinem Deutschlehrer ihm sein Haus.

    Ich erhalte aber alle Rechnungen, die den Status 'offen' haben, egal, ob sie vom Kunden 4 sind oder nicht... :(

    Und alle Rechnungen, die vom Kunden 4 sind, egal welchen Status sie haben - und egal ob sie von ihm sind oder nicht. Grund: Du verknüpfst jeden einzelnen Datensatz der einen Tabelle mit jedem einzelnen Datensatz der anderen Tabelle, bevor Du aus dem Ergebnis diejenigen Zeilen heraus nimmst, auf die die eine oder die andere Bedingung zutrifft. Nirgendwo sagst Du, welche Datensätze zu welchen Datensätzen gehören.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Bounjoun Cheatah,

      dem Jean-Max sein Weg sollte zu MySQL ihre Dokumentation über JOINs gehen.

      Was, RTFM?

      Und zu seinem Deutschlehrer ihm sein Haus.

      Dem Jean-Max sein Deutschstudium ist etwas lange her, doch, mich dünkt, einen Deutschlehrer braucht er selten.

      Und alle Rechnungen, die vom Kunden 4 sind, egal welchen Status sie haben

      Nein. Nur alle offenen.

      Grund: [...]

      Grund: habe einfach keine Ahnung.

      Nirgendwo sagst Du, welche Datensätze zu welchen Datensätzen gehören.

      Und genau das wollte ich erfahren, aber ich werde erst mal einen JOINt rauchen.

      Adiou.

      --
      Ich bin eigentlich ganz anders, aber ich komme so selten dazu. - Ödön von Horwáth
      Ist Rudi Carrell Gott? Oder George Harrison Ford?
      Ich bin faul und das ist gut so.
      1. hi,

        Und genau das wollte ich erfahren, aber ich werde erst mal einen JOINt rauchen.

        Aber nicht nasslutschen!!!

        scnr;
        Hotti

        --
        Fehler im SQL Statement merkst Du spätestens bei der Abfrage.
  2. hi,

    Die Tabelle 'kunden' enthält 13 Felder, unter anderem Kundennummer, Firmenname, Vorname, Nachname (der Ansprechpartner), Adresse, PLZ, Ort, usw.

    Die Tabelle 'rechnungen' enthält 8 Felder, unter anderem Rechnungsnummer, Kundennummer (die mit der Tabelle 'kunden' übereinstimmt), Rechnungsdatum, Betrag, Währung, Zahlungsdatum (wenn bezahlt), Status (also offen oder bezahlt) und Anmerkungen (z.B. Zahlungsmoral unter aller Sau *g*).

    Jetzt versuche ich folgendes abzufragen, hier erstmal Klartext: »Liste mir auf alle offenen Rechnungen des Kunden mit der Kundennummer x«. Nun das, was ich mir irgendwie zusammen gewurschtelt habe:

      
    SELECT kunden.kdnr from kunden  
    LEFT OUTER JOIN rechnungen  
    ON kunden.kdnr = rechnungen kdnr  
    WHERE kunden.kdnr = 4 AND rechnungen.rechnung = 'offen'  
    
    

    Fehlende Felder kannst Du bestimmt ergänzen. Feldnamen ggf. auf Tabelle beziehen, als kunden.kundennummer, kannst auch alias verwenden, kundennummer as kdnr. Die Where Klause kommt hintendran.

    Hotti

  3. Hi,

    Solele. Wenn das beantwortet ist, hätte ich noch die eine oder andere Frage...

    Gut - die kommt dann dran, wenn du die beiden Artikel zu JOINs unter http://aktuell.de.selfhtml.org/artikel/datenbanken/ durchgearbeitet hast :-)

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Bounjoun ChrisB,

      Gut - die kommt dann dran, wenn du die beiden Artikel zu JOINs unter http://aktuell.de.selfhtml.org/artikel/datenbanken/ durchgearbeitet hast :-)

      Na, bei meinem Terminplan zw. Rumänien und Werkstatt und km fressen sehen wir uns ziemlich genau nächstes Jahr wieder mit dieser Frage ;)

      Aber danke für den Hinweis, der sich bisher durch alle Antworten fädelt. Ich folge dem Appel du 18 JOIN [1]!

      [1] Können nur Franzosen verstehen...

      Adiou.

      --
      Ich bin eigentlich ganz anders, aber ich komme so selten dazu. - Ödön von Horwáth
      Ist Rudi Carrell Gott? Oder George Harrison Ford?
      Ich bin faul und das ist gut so.
      1. hi,

        Aber danke für den Hinweis, der sich bisher durch alle Antworten fädelt. Ich folge dem Appel du 18 JOIN [1]!

        [1] Können nur Franzosen verstehen...

        Es heißt JUIN