LIMIT 5 OFFSET 1 означает «начиная со второй строки», а не «пропустить одну страницу».
1
Ошибка: неправильные границы в CASE
При проверке диапазонов важен порядок условий. Если поставить > 70 перед BETWEEN 30 AND 70, диапазон никогда не сработает.
-- Неправильно: условие BETWEEN никогда не выполнится
CASE
WHEN quantity > 70 THEN 'large'
WHEN quantity < 30 THEN 'small'
WHEN quantity BETWEEN 30 AND 70 THEN 'medium' -- мёртвый код
END
Как исправить: либо используйте BETWEEN первым, либо проверяйте границы в правильном порядке.
CASE
WHEN quantity < 30 THEN 'small'
WHEN quantity BETWEEN 30 AND 70 THEN 'medium'
ELSE 'large'
END
2
Ошибка: путаница с OFFSET
«Начиная со второй» означает пропустить одну строку: OFFSET 1, а не OFFSET 2.
-- Неправильно: пропустит 2 строки, начнёт с третьей
SELECT *
FROM customers
WHERE job_title = 'Owner'
ORDER BY state_province
LIMIT 5 OFFSET 2;
Как исправить:
SELECT *
FROM customers
WHERE job_title = 'Owner'
ORDER BY state_province
LIMIT 5 OFFSET 1;
3
Ошибка: забыли ORDER BY с LIMIT
Без сортировки «7 строк» могут быть разными при каждом запуске.
-- Непредсказуемо
SELECT DISTINCT product_id
FROM order_details
WHERE quantity * unit_price > 200
LIMIT 7;
Как исправить:
SELECT DISTINCT product_id
FROM order_details
WHERE quantity * unit_price > 200
ORDER BY product_id ASC
LIMIT 7;
4
Ошибка: неправильная позиция в SUBSTRING
В строке (123) 456-7890 позиции символов: 1='(', 2='1', 3='2', 4='3', 5=')', 6=' ', 7='4'. Если нужны цифры после кода, позиция зависит от наличия пробела.
-- Неправильно: может захватить скобку или пробел
SELECT SUBSTRING(business_phone, 5, 3) FROM employees;
Как исправить: уточните формат данных в таблице. Для формата (XXX) XXX-XXXX правильная позиция — 6.
SELECT SUBSTRING(business_phone, 6, 3) FROM employees;