I am new to mysql and have an My sql query wrote and tryin to make an outer join with two subqueries but results are not showing accurate results here is the Query
SELECT a.lpcode,a.lpname,a.companycode,a.zone,a.tdy_growr,a.tdy_acres,b.tdate_growr,tdate_acres,a.name
FROM (SELECT z.lpcode,
x.companycode,
z.lpname,
z.zone,
z.name,
count(x.vehicleno) tdy_growr,
sum(x.haulagecode) tdy_acres
FROM gis.registration x, loadingpoint z
WHERE x.date =
(SELECT max(a.date)
FROM gis.registration a
WHERE a.fieldno > 0
AND a.haulagecode > 0
AND a.isaccepted = 1)
AND z.lpcode = x.lpcode
AND x.fieldno > 0
AND x.haulagecode > 0
AND x.isaccepted = 1
GROUP BY x.lpcode) a
RIGHT OUTER JOIN
(SELECT r.lpcode,
count(r.vehicleno) tdate_growr,
sum(r.haulagecode) tdate_acres
FROM gis.registration r, loadingpoint l
WHERE r.fieldno > 0 AND r.haulagecode > 0 AND r.isaccepted = 1
AND r.lpcode = l.lpcode
GROUP BY l.lpcode) b
ON a.lpcode = b.lpcode
ORDER BY a.zone, a.lpcode
Any Help May Appreciated thanks in advance
Right outer joins have terrible performance and there is not too many cases where you can’t change the structure of the query to use a left outer join instead which will perform better. What your query is doing is getting all rows from b regardless of whether or not there is a row in a to join to. The same query rewritten is:
This also gives all rows from b regardless of whether there is a matching row in a to join to.
If your problem is that you are getting NULLS in all of these columns: “a.lpcode,a.lpname,a.companycode,a.zone,a.tdy_growr,a.tdy_acres,a.tdate_acres,a.name” then use should be using the structure you are already using but with a LEFT OUTER JOIN instead which may return a null in this column “b.tdate_growr”