如何合并两条SQL查询:获取MID并关联队列统计数(无数据显示0)
合并两条SQL查询语句的解决方案
我正在开展一个项目,当前使用两条SQL查询语句获取需处理的结果:
Query 1
SELECT MID FROM PMS.MACHINE WHERE STATUS=1 AND MID !=0;
Query 2
SELECT MID,COUNT(STATUS) AS QUEUE FROM PMS.QUEUE WHERE STATUS=0 GROUP BY MID ORDER BY MID ASC;
我希望将这两条查询合并为单条语句,结果需展示PMS.MACHINE表的MID以及PMS.QUEUE表的QUEUE统计数,若无对应统计数则显示为0。
合并后的SQL语句
SELECT m.MID, COALESCE(q.QUEUE, 0) AS QUEUE FROM PMS.MACHINE m LEFT JOIN ( -- 子查询预计算每个MID对应的QUEUE统计数 SELECT MID, COUNT(STATUS) AS QUEUE FROM PMS.QUEUE WHERE STATUS=0 GROUP BY MID ) q ON m.MID = q.MID WHERE m.STATUS=1 AND m.MID !=0 ORDER BY m.MID ASC;
逻辑说明
- 使用**左连接(LEFT JOIN)**确保
PMS.MACHINE中所有符合筛选条件(STATUS=1且MID≠0)的记录都能被保留,即使在PMS.QUEUE中没有对应记录 - 子查询提前完成
PMS.QUEUE的统计工作,避免重复计算 COALESCE函数将无对应统计数时的NULL值替换为0,满足需求中的显示要求- 最后按
MID升序排序,与原Query 2的排序逻辑保持一致
内容的提问来源于stack exchange,提问作者Asarudin A
相关产品推荐
相关产品推荐

