Я получаю ошибку "Subquery returns more than 1 row
" при выполнении запроса, который должен возвращать результаты двух подзапросов.Почему возвращение более чем одной строки здесь является проблемой, и как я могу обойти эту проблему?
Таблицы данных и соответствующие поля выглядят так:
Accounts
id
Meetings
account_id
assign_user_id
start_date
Users
id
last_name
Встреча назначается учетной записи и пользователю.Я пытаюсь создать таблицу, в которой будет отображаться количество собраний для каждого назначенного пользователя для учетной записи, где дата начала собрания находится в разных диапазонах дат.Диапазоны дат должны быть расположены в той же строке, что и таблица с такими заголовками:
Account |Фамилия пользователя |Встречи 1-31 дней в будущем |Встречи 31-60 дней в будущем
, как показано на этом изображении:
.
Это мой запрос:
SELECT
(SELECT
a.name
FROM
accounts AS a
JOIN
meetings AS m ON a.id = m.account_id
AND date_start BETWEEN CURDATE() AND DATE_ADD(CURDATE(),INTERVAL 60 DAY)
JOIN
users AS u ON m.assigned_user_id = u.id
WHERE
m.status = 'Planned'
AND m.deleted = 0
GROUP BY a.id, u.id) AS 'Account',
(SELECT
u.last_name
FROM
accounts AS a
JOIN
meetings AS m ON a.id = m.account_id
AND date_start BETWEEN CURDATE() AND DATE_ADD(CURDATE(),INTERVAL 60 DAY)
JOIN
users AS u ON m.assigned_user_id = u.id
WHERE
m.status = 'Planned'
AND m.deleted = 0
GROUP BY a.id, u.id) AS 'Name',
(SELECT
COUNT(m.id)
FROM
accounts AS a
JOIN
meetings AS m ON a.id = m.account_id
AND date_start BETWEEN CURDATE() AND DATE_ADD(CURDATE(),INTERVAL 30 DAY)
JOIN
users AS u ON m.assigned_user_id = u.id
WHERE
m.status = 'Planned'
AND m.deleted = 0
GROUP BY a.id, u.id) AS 'Meetings 1-30 days',
(SELECT
COUNT(m.id)
FROM
accounts AS a2
JOIN
meetings AS m ON a.id = m.account_id
AND m.date_start BETWEEN DATE_ADD(CURDATE(),INTERVAL 31 DAY) AND DATE_ADD(CURDATE(),INTERVAL 60 DAY)
JOIN
users AS u ON m.assigned_user_id = u.id
WHERE
m.status = 'Planned'
AND m.deleted = 0
GROUP BY a.id, u.id) AS 'Meetings 31-60 days'
Столбцы, содержащие имена учетных записей и имена пользователей, должны были быть добавлены как подзапросы, чтобы избежать ошибок "Operand should contain 1 column(s)
".Столбцы, соответствующие количеству собраний, должны быть подзапросами, поскольку ни одна строка объединенной таблицы не может одновременно соответствовать обоим диапазонам дат.Каждый подзапрос возвращает ожидаемые результаты при запуске индивидуально.Но я получаю «Subquery returns more than 1 row
», когда подзапросы собраны, как показано.Я пытался назначить разные псевдонимы для каждого подзапроса, но это не помогло.