我们如何进行所有查询的参数都相同的子查询

时间:2019-02-19 12:15:02

标签: mysql sql

我有3个查询,可用于从3个不同的表中获取计数。但是我需要一个查询才能通过子查询获得三个计数,而我正在传递
相同参数(user_id)最多3个查询

第一:

SELECT COUNT(*) FROM `user_outlet` JOIN `outlet` 
ON `outlet`.`id`=`user_outlet`.`outlet_id`
WHERE `user_outlet`.`user_id`=? AND `user_outlet`.`isActive`=TRUE

第二:

SELECT COUNT(*) FROM `audit_schedule` JOIN `user_outlet`  
ON `user_outlet`.id=`audit_schedule`.`auditer_id`
WHERE  `audit_schedule`.`auditer_id`=? 
AND MONTH(`audit_schedule`.`schedule_date`)=MONTH(NOW())

第三名:

SELECT COUNT(*) FROM `audit` JOIN `user_outlet` 
ON `user_outlet`.id=`audit`.`auditor_id` 
WHERE  `audit`.`auditor_id`=? AND MONTH(`audit`.`created_date`)=MONTH(NOW())

我想使用子查询作为单个查询进行3个查询 我预计输出为 第一个查询的总计数和第二个查询的计划计数的第三个查询的完成计数,并且仅传递单个参数user_id(即=?)

1 个答案:

答案 0 :(得分:2)

如果要重用参数,可以将其放在派生表中(FROM子句中的子查询)。示例:

FROM (SELECT ? as user_id) x

然后,您可以重复使用别名x.user_id

SELECT (
    SELECT COUNT(*) FROM `user_outlet` JOIN `outlet` 
    ON `outlet`.`id`=`user_outlet`.`outlet_id`
    WHERE `user_outlet`.`user_id`=x.user_id AND `user_outlet`.`isActive`=TRUE
) as total_count, (
    SELECT COUNT(*) FROM `audit_schedule` JOIN `user_outlet`  
    ON `user_outlet`.id=`audit_schedule`.`auditer_id`
    WHERE  `audit_schedule`.`auditer_id`=x.user_id 
    AND MONTH(`audit_schedule`.`schedule_date`)=MONTH(NOW())
) as planned_count,
    SELECT COUNT(*) FROM `audit` JOIN `user_outlet` 
    ON `user_outlet`.id=`audit`.`auditor_id` 
    WHERE  `audit`.`auditor_id`=x.user_id AND MONTH(`audit`.`created_date`)=MONTH(NOW())
) as completed_count
FROM (SELECT ? as user_id) x