请教一个 SQL 的问题,来个大佬帮忙丁真下

查看 96|回复 6
作者:bingfengCoder   
SELECT
        p.project_code AS 项目编码,
        p.project_name AS 项目名称,
        count( e.id ) AS 建筑数量,
        count( d.id ) AS 设备数量
FROM
        `emp_project` p
        LEFT JOIN `architecture` e ON p.id = e.`project_id`
        AND e.`is_active` = 1
        AND e.`level` = 30
        AND e.`source_type` = 'Z'
        LEFT JOIN `project_device` d ON p.id = d.project_id
        AND d.is_active = 1
        AND d.device_type IN ( 1, 2, 3, 4 )
WHERE
        p.`is_active` = 1
        AND p.`source_type` = 'Z'
GROUP BY
        p.id
SELECT
        p.project_code AS 项目编码,
        p.project_name AS 项目名称,
        en.encount AS 建筑数量,
        de.decount AS 设备数量
FROM
        `emp_project` p
        LEFT JOIN ( SELECT `project_id`, count(*) AS encount FROM `architecture` WHERE `level` = 30 AND `is_active` = 1
        AND `source_type` = 'Z' GROUP BY `project_id` ) en ON p.id = en.`project_id`
        LEFT JOIN (
        SELECT
                `project_id`,
                count(*) AS decount
        FROM
                `project_device`
        WHERE
                `is_active` = 1
                AND `device_type` IN ( 1, 2, 3, 4 )
        GROUP BY
                `project_id`
        ) de ON p.id = de.project_id
WHERE
        p.`is_active` = 1
        AND p.`source_type` = 'Z'
这两段 sql 在同一个库里执行,结果天差地别,但是从连接和分组以及查询条件来看,感觉不出来有什么差异,大佬们能不能一眼丁真帮看下原因

project_id, ect, is_active, and

hxpmc   
第二个慢?
bingfengCoder
OP
  
@hxpmc 不是快慢的问题,现在不考虑性能,它们查询结果完全不一样,就是 count 值差别很大,但是从直觉上去读这两个 sql ,总感觉又没毛病
Xinu   
没去问问 gpt 吗 现在 sql 问题一律先问 gpt
bingfengCoder
OP
  
@Xinu 问过了,结果就是人工智障,它告诉我这是两个相似的 sql ,结果也应该相似。。。。但是实际执行结果 count 相差很大
gerryzhu0033   
left join 和 right join 后面不要用 where ,用了 where 就变普通 join 了
inkmulberry   
感觉上应该是第一个 count 更大
您需要登录后才可以回帖 登录 | 立即注册

返回顶部