SQL:
CREATE TEMPORARY TABLE tmp2_400 SELECT * FROM `t_400` WHERE `lfdnr` = '7254' AND artnr = '5020401 ';
SELECT t_030_1.bez AS Kriterium, t_030_2.bez AS kritbez
FROM tmp2_400
LEFT JOIN t_050 ON tmp2_400.kritnr = t_050.kritnr
LEFT JOIN t_030 AS t_030_1 ON t_050.beznr = t_030_1.beznr
LEFT JOIN t_052 ON tmp2_400.kritwert = CONVERT( t_052.`key` , signed )
LEFT JOIN t_030 AS t_030_2 ON t_052.beznr = t_030_2.beznr WHERE (t_050.tabnr = t_052.tabnr) AND t_030_1.sprachnr = '1' AND t_030_2.sprachnr = '1'
GROUP BY t_030_2.bez
ORDER BY t_030_1.bez
Die temporäre Tabelle oben erstelle ich nur weil anscheinend zu doof bin die WHERE Klausel korrekt zu formulieren!
Normal wäre ja auch das hier machbar!
SQL:
SELECT t_030_1.bez AS Kriterium, t_030_2.bez AS kritbez
FROM t_400 LEFT JOIN t_050 ON t_400.kritnr = t_050.kritnr
LEFT JOIN t_030 AS t_030_1 ON t_050.beznr = t_030_1.beznr
LEFT JOIN t_052 ON t_400.kritwert = CONVERT( t_052.`key` , signed )
LEFT JOIN t_030 AS t_030_2 ON t_052.beznr = t_030_2.beznr
WHERE (t_050.tabnr = t_052.tabnr) AND t_030_1.sprachnr = '1' AND t_030_2.sprachnr = '1' AND t_400.`lfdnr` = '7254' AND t_400.artnr = '5020401' GROUP BY t_030_2.bez ORDER BY t_030_1.bez
Nur wenn ich mir dann per EXPLAIN anzeigen lasse wie der MYSQL Server vorgeht, dann kommt mir das schaudern!
Hier mal ein Dump davon:
Code:
1 SIMPLE t_030_1 ref sprachnr,beznr sprachnr 4 const 16731 Using where; Using temporary; Using filesort
1 SIMPLE t_050 ref beznr beznr 4 tecdoc.t_030_1.beznr 12 Using where
1 SIMPLE t_052 ref tabnr,beznr tabnr 4 tecdoc.t_050.tabnr 12 Using where
1 SIMPLE t_030_2 ref sprachnr,beznr beznr 4 tecdoc.t_052.beznr 73 Using where
1 SIMPLE t_400 ref kritwert,kritnr kritnr 4 tecdoc.t_050.kritnr 681 Using where
Bei der t_400 zeigt er mit also 681 Datensätze an also zieht die WHERE Klausel nicht, denn wenn ich schreibe
SQL:
SELECT * FROM t_400 WHERE artnr = '5020401' and lfdnr='7254'
Jemand ne Idee oder sieht auf Anhieb ob die WHERE Klausel verkehrt ist?
LG
Bebo
Zuletzt bearbeitet von einem Moderator: