← К оглавлению занятия

🐛 Типичные ошибки

⚡ Кратко: ошибки

  • Путать 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