(my)SQL-Abfrage über zwei Tabellen
Jean-Max
- datenbank
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.
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
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.
hi,
Und genau das wollte ich erfahren, aber ich werde erst mal einen JOINt rauchen.
scnr;
Hotti
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
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
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.
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...