У меня есть 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 запроса, которые я хотел сделать как один запрос с использованием подзапроса, и я ожидал, что Out будет выставлен как общий счет для 1-го запроса и плановый счет для 2-го запроса, завершенный для 3-го запроса и передачи только одного параметра user_id (т.е. =?)
Если вы хотите повторно использовать параметр, вы можете поместить его в производную таблицу (подзапрос в предложении 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
UNION ALL
.