Как сделать выбранный запрос в качестве псевдонима для использования в другом подзапросе? - PullRequest
0 голосов
/ 05 октября 2018

Я пытался найти ответ на свой вопрос, но я не нашел подходящего мне.Так, например, у меня есть 2 таблицы, которые являются студентами и тестами.у студентов есть 2 поля student_id, name и для тестов, test_id и student_id.то, что я хочу сделать, это запрос, чтобы напечатать student_id, имя и общий тест, который сделал студент.мой неудачный запрос

SELECT S.student_id, T.TOTAL 
FROM students as S , ((SELECT student_id, COUNT(test_id) AS TOTAL
FROM tests
GROUP BY student_id) AS T)
WHERE S.student_id = T.student_id;

возвращает

ОШИБКА 1064 (42000) в строке 1: в синтаксисе SQL имеется ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 'AS T' в строке 2

, как сделать запрос с псевдонимом для «временной таблицы» для использования в другом подзапросе.?Пожалуйста, дайте мне самый простой ответ, а также расширенный ответ в MySQL, чтобы я мог сравнить оба ответа, которые будут изучены позже.Спасибо

1 Ответ

0 голосов
/ 05 октября 2018

Здесь нет различий, разделенных запятыми, и соединение записи явно.Я бы предпочел написать соединение явно, чтобы было яснее, что я там делаю, поскольку существуют разные типы соединений doc .

С явным объединением

SELECT S.student_id, T.TOTAL 
FROM students AS S
INNER JOIN (
    SELECT student_id, COUNT(test_id) AS TOTAL
    FROM tests GROUP BY student_id
) AS T ON S.student_id = T.student_id;

С подзапросом в выборе

SELECT S.student_id, (SELECT COUNT(test_id) AS TOTAL
FROM tests
where tests.student_id = S.student_id
GROUP BY student_id) as Total
FROM students AS S;

С вашим путем ( убрал лишние скобки из подзапроса )

SELECT S.student_id, T.TOTAL 
FROM students AS S , (SELECT student_id, COUNT(test_id) AS TOTAL
FROM tests
GROUP BY student_id) AS T
WHERE S.student_id = T.student_id;

Живой пример

...