Hallo
ich habe eine MySQL DB die hat unter anderen die Tabellen rechnungen und kunden. Nun will ich eine Abfrage über beide Tabellen machen, bei der aber nur Datensätze berücksichtigt werden, wenn die letzte Rechnung älter als 3 Monate her ist. ... Ich habe z. B. folgendes versucht:
SELECT r.datum,r.kunde,k.anrede,k.vorname,k.nachname,k.strasse,k.hausnr,k.plz,k.ort,k.email FROM rechnungen r,kunden k WHERE (k.id=r.kunde) AND (r.datum<'$mon3') HAVING MAX(r.datum)
Das geht aber nicht. Wie muß ich das machen?
Das kann nicht gehen. Wenn Du in _einem_ Feld eine Aggregatsfunktion verwendest, so musst _Du_ dies in _allen_ Feldern Deiner Abfrage tun, ausser bei den Feldern, die in der HAVING-Klausel auftauchen.
Ich persönlich bevorzuge für den JOIN die JOIN-Klausel ;-)
MySQL verlangt nicht die vielen, vielen unsinnigen Klammern von MS Access :-)
Soweit ich das verstanden habe, würdest Du für Dein Problem SUBSELECTS benötigen - beachte bitte den Irrealis - aber SUBSELECTS sind in MySQL v3.23.xx noch nicht enthalten.
D.h. Du solltest Deine Idee von gestern durchaus realisieren.
1. Abfrage ermittelt die Kunden-IDs (das kriegst Du hin)
2. Abfrage nutzt das Ergebnis der 1. Abfrage in WHERE k.id IN (...)
also als Ersatz für ...
Näheres entnimm bitte der MySQL-Dokumentation.
Gruss,
Vinzenz
Die FAQ </faq/> des Forums sind lesenswert und hilfreich.