Это не ответ, а просто объяснение того, что делает ваш запрос.
В своем собственном запросе вы сначала перекрестно объединяете все QnAs со всеми курсами без видимой причины, таким образом получая все возможные комбинации.Таким образом, с двумя курсами, каждый с тремя QNA (что в сумме составляет шесть QNA), вы построите 2 x 6 = 12 строк.
Для каждой из этих строк вы выбираете общее количество строк в QNAтаблица, которая составляет шесть в приведенном выше примере.Таким образом, вы выбрали бы 12 строк, все из которых показывают номер 6.
Но затем вы группируете по идентификатору курса, в результате чего в моем примере только две строки.Вы должны применить агрегатную функцию к вашему подзапросу, например, MAX
или SUM
, но это не так, что делает ваш запрос недействительным (потому что вы имеете дело со многими строками, но рассматриваете это, как если бы это было одно значение),MySQL, однако, молча применяет ANY_VALUE
, поэтому ваш запрос становится следующим:
SELECT
ANY_VALUE( (SELECT COUNT(*) FROM QnAs) ) AS Count
FROM QnAs AS QnAs_1
CROSS JOIN Courses
GROUP BY Courses.courses_id;
Надеюсь, это объяснение поможет вам понять, как работают объединения и агрегирование.Возможно, вы захотите установить режим ONLY_FULL_GROUP_BY (https://dev.mysql.com/doc/...), чтобы MySQL сообщал о синтаксической ошибке, вместо того чтобы молча «исправлять» запрос, применяя ANY_VALUE
.