← К оглавлению занятия
⚡ Кратко: ошибки
- Путать
IF (MySQL) и CASE (стандарт).
- Забывать
END в CASE.
- Использовать
LIMIT без ORDER BY.
- Путать строки и страницы в
OFFSET.
1
Ошибка: использование IF вне MySQL
Запрос с IF(condition, true, false) работает в MySQL, но не в PostgreSQL, SQL Server и SQLite.
-- Работает в MySQL, ошибка в PostgreSQL
SELECT IF(quantity < 20, 'Almost finish', 'Enough')
FROM inventory_transactions;
Как исправить: используйте CASE для переносимых запросов.
SELECT CASE
WHEN quantity < 20 THEN 'Almost finish'
ELSE 'Enough'
END
FROM inventory_transactions;
2
Ошибка: пропущен END в CASE
Каждый блок CASE должен заканчиваться словом END.
-- Неправильно
SELECT CASE WHEN quantity < 20 THEN 'Almost finish' ELSE 'Enough' AS category
FROM inventory_transactions;
Как исправить:
SELECT CASE
WHEN quantity < 20 THEN 'Almost finish'
ELSE 'Enough'
END AS category
FROM inventory_transactions;
3
Ошибка: LIMIT без ORDER BY
Результат не будет детерминированным.
-- Непредсказуемо
SELECT * FROM customers LIMIT 5;
Как исправить:
SELECT * FROM customers ORDER BY company ASC LIMIT 5;
4
Ошибка: неправильный порядок условий в CASE
Условия проверяются сверху вниз. Если общее условие идёт раньше частного, частное никогда не выполнится.
-- Неправильно
CASE
WHEN quantity > 0 THEN 'positive'
WHEN quantity > 100 THEN 'big' -- мёртвый код
END
Как исправить: сначала более специфичные условия.
CASE
WHEN quantity > 100 THEN 'big'
WHEN quantity > 0 THEN 'positive'
ELSE 'zero or negative'
END