Сгруппированный запрос для поиска только одной записи (employee_id = 1 или ноль) - PullRequest
0 голосов
/ 27 мая 2018

Моя информация в БД:
enter image description here

Я получу уникальную запись для каждого дня недели, если для employee_id задано значение этой записи, в противном случае employee_id равно Null.Я пытаюсь этот запрос

SELECT 
  * 
FROM
  `calendar` 
WHERE `employee_id` = 1 
  OR `employee_id` IS NULL 
GROUP BY `weekday` 

результат равен

enter image description here

Но я ожидаю

enter image description here

Вы можете мне помочь?Спасибо

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Попробуйте:

SELECT 
  b.calendar_id,
  a.employee_id,
  a.weekday 
FROM
  (SELECT 
    `weekday`,
    MAX(employee_id) AS employee_id 
  FROM
    calendar 
  WHERE employee_id = 1 
    OR employee_id IS NULL 
  GROUP BY `weekday`) a 
  LEFT JOIN calendar b 
    ON a.weekday = b.weekday 
    AND a.employee_id = b.employee_id ;

Дайте мне знать, если у вас есть какие-либо разъяснения.

0 голосов
/ 27 мая 2018

Проблема в том, что у вас есть столбцы в списке после SELECT, которые не появляются в выражении GROUP BY и к ним не применяется агрегатная функция.MySQL, в отличие от большинства других СУБД, допускает это в более старых версиях (или с некоторыми настройками), но результаты, скорее всего, будут мусором.

Исправьте это, включив столбцы в выражение GROUP BY или применивагрегатная функция на них.Например:

SELECT max(`employee_id`),
       `weekday`
       FROM `calendar` 
       WHERE `employee_id` = 1 
              OR `employee_id` IS NULL 
       GROUP BY `weekday`;

Обратите внимание на агрегатную функцию max() в employee_id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...