2012-05-04 3 views
3

Таблица:SQL Query - подзапрос возвращает более одной строки

laterecords 
----------- 
studentid - varchar 
latetime - datetime 
reason - varchar 

мой запрос:

SELECT laterecords.studentid, 
laterecords.latetime, 
laterecords.reason, 
(SELECT Count(laterecords.studentid) FROM laterecords 
     GROUP BY laterecords.studentid) AS late_count 
FROM laterecords 

Я получаю "MySQL подзапрос возвращает более одной строки" ошибка.

Я знаю, обходной путь для этого запроса использовать следующий запрос:

SELECT laterecords.studentid, 
laterecords.latetime, 
laterecords.reason 
FROM laterecords 

Затем с помощью цикла PHP, чтобы хотя результаты и сделать ниже запроса, чтобы получить late_count и эхо его:

SELECT Count(laterecords.studentid) AS late_count FROM laterecords 

Но я думаю, что может быть лучшее решение?

ответ

3

Простое исправление добавить пункт WHERE в вашем подзапрос:

SELECT 
    studentid, 
    latetime, 
    reason, 
    (SELECT COUNT(*) 
    FROM laterecords AS B 
    WHERE A.studentid = B.student.id) AS late_count 
FROM laterecords AS A 

Лучший вариант (с точки зрения производительности) заключается в использовании объединения:

SELECT 
    A.studentid, 
    A.latetime, 
    A.reason, 
    B.total 
FROM laterecords AS A 
JOIN 
(
    SELECT studentid, COUNT(*) AS total 
    FROM laterecords 
    GROUP BY studentid 
) AS B 
ON A.studentid = B.studentid 
Смежные вопросы