SELECT t1 . * , t2.code AS code
FROM t1
LEFT JOIN t2 ON t1.ordernumber = t2.ordernumber AND t2.queueID IN (SELECT MAX(queueID) FROM t2 GROUP BY name)
WHERE `user` = 1
GROUP BY name
macht das so sinn oder gibts da noch was zu optimieren?
und ich habe jetzt noch eine tabelle3, die eine lesbare nachricht zu den codes hat. diesen möchte ich auch mitladen.
wieso funktioniert der folgende query nicht?
SELECT t1 . * , t2.code AS code, t3.msg
FROM t1
LEFT JOIN t2 ON t1.ordernumber = t2.ordernumber AND t2.queueID IN (SELECT MAX(queueID) FROM t2 GROUP BY name)
LEFT JOIN t3 ON t3.code = t2.code
WHERE `user` = 1
GROUP BY name
so besser? der user ist später nicht immer 1 sondern unterschiedlich.
SELECT t1 . * , t2.code AS code
FROM t1
LEFT JOIN t2 ON t1.ordernumber = t2.ordernumber AND t2.queueID IN (SELECT MAX(queueID) FROM t2 WHERE ordernumber IN (SELECT ordernumber FROM t1 WHERE user = 1) GROUP BY name)
WHERE `user` = 1
GROUP BY name
Du selektierst die odernumber doch schon in der äußeren Query – da braucht es keinen weiteren (Sub-)Subselect mehr innen um diese zu bestimmen, sondern nur eine Referenzierung auf erstere.
SELECT t1 . * , t2.code AS code
FROM t1
LEFT JOIN t2 ON t1.ordernumber = t2.ordernumber AND t2.queueID IN
(SELECT MAX(queueID) FROM t2 WHERE t1.ordernumber = t2.ordernumber GROUP BY name)
WHERE `user` = 1
GROUP BY name
order gibt es eine möglichkeit den teil rauszulassen?
t2.queueID IN
(SELECT MAX(queueID) FROM t2 WHERE t1.ordernumber = t2.ordernumber GROUP BY name)