Как мы можем сделать подзапросы с количеством, где параметры одинаковы для всех запросов

0

У меня есть 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 (т.е. =?)

  • 0
    Используйте UNION ALL .
  • 0
    Вы пробовали использовать UNION ALL?
Показать ещё 1 комментарий
Теги:

1 ответ

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
  • 0
    Возвращает некоторую ошибку около строки 11, я просто удалил заполнитель (?) И передал user_id как 1
  • 0
    Я подумал, что вы хотите использовать его в подготовленном утверждении, поскольку вы также используете заполнители в своих запросах.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню