У меня есть таблицы attendance
, employee
, payroll
Почему SQL возвращает другой результат при использовании счета и подсчете, * в запросе
посещений стола:
Employee_ID Clockin Clockout
---------------------------------
1 08:00:00 18:00:00
2 08:00:00 18:00:00
3 08:00:00 18:00:00
4 08:00:00 18:00:00
Сотрудник стола:
Employee_ID Name Employee_type
---------------------------------
1 Mary Full-time
2 Peter Full-time
3 John Full-time
4 Henry Full-time
Это SQ L запрос, я получаю только 1 ряд
SELECT *, COUNT(attendance.Clockin)
FROM payroll
LEFT JOIN attendance ON attendance.Employee_ID = payroll.Employee_ID
LEFT JOIN employee ON employee.Employee_ID = payroll.Employee_ID
WHERE employee.Employee_type = 'Full-time'
Вот SQL-запрос, который я получаю больше строк вернулся
SELECT *
FROM payroll
LEFT JOIN attendance ON attendance.Employee_ID = payroll.Employee_ID
LEFT JOIN employee ON employee.Employee_ID = payroll.Employee_ID
WHERE employee.Employee_type = 'Full-time'
В чем разница между этими двумя запросами?
Предполагая, что это mysql, он использует расширенную группу. Смысл, если вы не определяете группу, он выберет одно значение из каждого столбца и вернет его. Поскольку первый имеет совокупность, расширенная группа по сути, где, когда второй select * не имеет агрегата, поэтому он просто возвращает каждую строку. [Сервер может выбирать любое значение из каждой группы, поэтому, если они не совпадают, выбранные значения являются неопределенными.] (Https://dev.mysql.com/doc/refman/5.0/en/group-by- handling.html) – xQbert
Посещение результирующего набора.Clockin содержит null. – jarlh
Вы выбираете из таблицы 'payroll'. Где это?Показать контент –