mysql左連接查詢結果不准確


現有四張表

表(1)res_resource_catalog

表(2)res_catalog_classify

表(3)res_resource_classify

表(4)res_resource_mount

其中,表3是表1和表2的中間表,表1的主鍵是表4的外鍵

現在要統計表2中某一類型的表1的當前用戶創建的數據量,以及表1相關的表4的數據量

一開始的sql如下:

SELECT rcc.id, rcc.catalog_name, COUNT(DISTINCT rrc.id) AS resourceCatalogCount,COUNT(DISTINCT rrm.id) AS resourceCount FROM
        (SELECT * FROM res_catalog_classify WHERE catalog_type = #{catalogType} AND parent_id != '0' AND is_publish = 1) rcc
        LEFT JOIN res_resource_classify rrc ON rcc.id = rrc.classify_id
        LEFT JOIN res_resource_catalog rrc1 ON rrc.resource_id = rrc1.id
        LEFT JOIN res_resource_mount rrm ON rrc.resource_id = rrm.resource_id
        <where>
            <if test="createUser != null and createUser != ''">
                AND rrc1.create_user = #{createUser}
            </if>
            AND rrc1.is_publish = 1
        </where>
        GROUP BY rcc.id

結果查詢不准確,當createUser沒有在表1中創建數據時,查詢結果為null,實際應該是表2數據有,但是結果中的resourceCatalogCount為0,經改正后的sql如下:

SELECT rcc.id, rcc.catalog_name, COUNT(DISTINCT rrc1.id) AS resourceCatalogCount,COUNT(DISTINCT rrm.id) AS resourceCount FROM
        (SELECT * FROM res_catalog_classify WHERE catalog_type = #{catalogType} AND parent_id != '0' AND is_publish = 1) rcc
        LEFT JOIN res_resource_classify rrc ON rcc.id = rrc.classify_id
        LEFT JOIN ( SELECT * FROM res_resource_catalog <where>
            <if test="createUser != null and createUser != ''"> AND rrc1.create_user = #{createUser} </if> AND rrc1.is_publish = 1 </where> ) rrc1 ON rrc.resource_id = rrc1.id
        LEFT JOIN res_resource_mount rrm ON rrc.resource_id = rrm.resource_id
        GROUP BY rcc.id

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM