#mysql #mariadb #sql
В БД (MySQL) есть таблица tab с внешним ключом parent_id и некоторым набором полей. Поле order отвечает за очередность вывода данных и содержит значения 1,2,3 и т.п. Для проверки валидности данных нужно сопоставить количество значений для с одинаковым parent_id и максимальное значение в поле order. Текущее решение: SELECT l.parent_id, l.m, r.c FROM ( SELECT parent_id max(`order`) as m FROM tab GROUP BY parent_id ) AS l INNER JOIN ( SELECT parent_id, count(*) AS c FROM tab GROUP BY parent_id ) AS r ON l.parent_id = r.parent_id WHERE l.m <> r.c; Запрос - рабочий, но очень медленный. Вопрос к SQL-оптимизаторам: как упростить и каково направление размышлений в процессе улучшения запроса?
Ответы
Ответ 1
Слишком сложно. Если правильно понял, то: select parent_id, count(*), max(`order`) from tab group by parent_id having count(*)<>max(`order`) SQLFiddle
Комментариев нет:
Отправить комментарий