Mailinglisten-Archive |
> > Nun möchte ich den aktuellen Stand, also die Menge an Einnahmen nach > > Abzug der Ausgaben wissen. > > > > SELECT namen.name, > > SUM(einnahmen.menge) - SUM(ausgaben.menge) AS bestand > > FROM namen, einnahmen, ausgaben > > GROUP BY namen.p_id > > > > Aber irgendwo hab ich da wohl einen mächtigen Denkfehler drin. > > vielleicht solltest du MySQL noch sagen _wie_ er die Tabellen verknüpfen > soll, nämlich anhand der `p_id` > entweder im WHERE > oder noch besser gleich per LEFT JOIN mit ON oder USING Hab es so probiert: SELECT namen.name, SUM( einnahmen.menge ) - SUM( ausgaben.menge ) AS bestand FROM namen LEFT JOIN ausgaben ON namen.p_id = ausgaben.p_id LEFT JOIN einnahmen ON namen.p_id = einnahmen.p_id GROUP BY namen.p_id Aber die Berrechnug ist dennoch falsch. Die Ausgaben werden korrekt von den Einnahmen abgezogen, aber dann wird das Ergebnis wieder mit den Einnahmen addiert und als Endergebnis ausgegeben. Mit meinen Beispielzahlen wäre das dann: 1000 - 50 -100 + 1000 = 1850 Ich verstehs nicht )-: Meine Testtabellen: CREATE TABLE `ausgaben` ( `v_id` int(11) NOT NULL auto_increment, `p_id` int(11) NOT NULL default '0', `menge` int(11) NOT NULL default '0', PRIMARY KEY (`v_id`) ) TYPE=MyISAM AUTO_INCREMENT=5 ; INSERT INTO `ausgaben` VALUES (1, 1, 100); INSERT INTO `ausgaben` VALUES (2, 1, 50); CREATE TABLE `einnahmen` ( `b_id` int(11) NOT NULL auto_increment, `p_id` int(11) NOT NULL default '0', `menge` int(11) NOT NULL default '0', PRIMARY KEY (`b_id`) ) TYPE=MyISAM AUTO_INCREMENT=3 ; INSERT INTO `einnahmen` VALUES (1, 1, 1000); CREATE TABLE `namen` ( `p_id` int(11) NOT NULL auto_increment, `name` varchar(100) NOT NULL default '', PRIMARY KEY (`p_id`) ) TYPE=MyISAM AUTO_INCREMENT=4 ; INSERT INTO `namen` VALUES (1, 'test'); -- Koala
php::bar PHP Wiki - Listenarchive