Lukas.: mysql: Query gesucht

Beitrag lesen

Moin,

ich habe 3 Tabellen und suche eine Query hierfür. Vorab, ich habe diese Tabellen vor etlichen Jahren angelegt und bin grad' selber sehr unglücklich über die Redundanzen und sonstigen strukturellen "Besonderheiten". Es ist nur grad der falsche Zeitpunkt, sich hierum zu kümmern, da ich in Folge eines strukturellen Umbaus zu viele Nachfolgearbeiten in den Scripten haben würde. Aber versprochen, ich werde mich darum später kümmern.

Zum Problem und ggf. zum Nachvollziehen des Problems:


CREATE TABLE IF NOT EXISTS `lt_products` (
  `LTID` int(6) NOT NULL,
  `LID` int(6) NOT NULL DEFAULT '1',
  `PID` int(6) NOT NULL DEFAULT '1',
  `Menge` float(10,2) NOT NULL DEFAULT '0.00',
  `Preis` decimal(10,2) DEFAULT '0.01',
  `Nachlass` decimal(4,2) DEFAULT '0.00',
  `MID` int(6) NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT;

CREATE TABLE IF NOT EXISTS `tb_products` (
  `TBID` int(6) NOT NULL,
  `MID` int(5) NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT;

CREATE TABLE IF NOT EXISTS `t_products` (
  `TID` int(6) NOT NULL,
  `TBID` int(5) NOT NULL DEFAULT '0',
  `TAnzahl` decimal(6,2) DEFAULT '0.00',
  `TVK` decimal(10,2) DEFAULT NULL,
  `MwstSatz` decimal(4,2) NOT NULL
) ENGINE=MyISAM DEFAULT;

-- -----------------------------------------------------------------------------------

INSERT INTO `lt_products` (`LTID`, `LID`, `PID`, `Menge`, `Preis`, `Nachlass`, `MID`) VALUES
(122, 35, 2646, 2.00, '44.00', '0.00', 4619),
(123, 35, 2647, 2.00, '55.00', '10.00', 4619);

INSERT INTO `tb_products` (`TBID`, `MID`) VALUES
(2268, 4619),
(2269, 4619);

INSERT INTO `t_products` (`TID`, `TBID`, `TAnzahl`, `TVK`, `MwstSatz`) VALUES
(2646, 2268, '2.00', '44.00', '21.00'),
(2647, 2269, '2.00', '55.00', '20.00');

-- -----------------------------------------------------------------------------------

Nun möchte ich die Summen aller lt-Produkte abzüglich Nachlass, aber mit dem MwSt-Satz aus der t_products-Tabelle.

Leider geht mir über meine Queries immer der Nachlass flöten.

Das liegt an meiner Subquery, in der der Nachlass bereits nicht enthalten ist.

SELECT t.TAnzahl AS Menge, 
 t.TVK AS VK, 
 lt.Nachlass AS Nachlass
 FROM t_products t 
 JOIN tb_products tb ON t.TBID = tb.TBID 
 LEFT JOIN lt_products lt ON tb.MID = lt.MID 
 WHERE t.MwstSatz = '20.00' 
 AND tb.MID = 4619 
 GROUP BY t.TID

Wenn man die Gruppierung wegläßt, wirds noch klarer. Dann habe ich eine Ergebnismange mit 2 Zeilen, eine mit Nachlass und eine ohne.

Wie muss die Query lauten, damit der Nachlass beinhaltet ist?

L.