2012-06-13 41 views
0

我是新來的MySQL,並有我的SQL查詢中寫道,並試着讓外有兩個子查詢,但結果加入未顯示在這裏準確的結果是查詢Mysql的右外連接不能正常工作100%

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 

任何幫助可能預先感謝提前

+0

沒有關於您期望的更多信息以及爲什麼您認爲結果是錯誤的,我懷疑你會得到很多幫助。 – madth3

回答

0

右外連接有可怕的性能,並沒有太多的情況下,你不能改變查詢結構使用左外連接,而不是更好的執行。您的查詢所做的是從b獲取所有行,無論是否存在要加入的行。同樣的查詢改寫爲:

SELECT    a.lpcode,a.lpname,a.companycode,a.zone,a.tdy_growr,a.tdy_acres,b.tdate_growr,a.tdate_acres,a.name 
FROM (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 
    LEFT OUTER JOIN (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 
    ON a.lpcode = b.lpcode 
ORDER BY a.zone, a.lpcode 

這也給了從B不管是否有匹配行的加入到所有行。

如果您的問題是您在所有這些列中都獲得了NULLS:「a.lpcode,a.lpname,a.companycode,a.zone,a.tdy_growr,a.tdy_acres,a.tdate_acres,a。名稱「,則應使用您已使用的結構,但使用LEFT OUTER JOIN,而不是在此列中返回空值」b.tdate_growr「