Ответ
В SQL 0 (ноль) и NULL (отсутствие значения) — это разные сущности. Для выборки строк, где числовое поле равно именно нулю, используется простое сравнение.
Базовый запрос:
SELECT id, product_name, quantity
FROM inventory
WHERE quantity = 0;
Этот запрос вернет все товары, остаток которых равен нулю.
Если нужно включить и NULL:
Часто в бизнес-логике NULL тоже трактуется как "отсутствие" или "ноль". В этом случае используется оператор IS NULL.
-- Выбрать товары, которых нет в наличии (quantity = 0 ИЛИ quantity IS NULL)
SELECT id, product_name, quantity
FROM inventory
WHERE quantity = 0 OR quantity IS NULL;
Работа с разными типами данных:
- Для строковых полей (
VARCHAR), где хранится числовое значение как текст, нужно сравнивать со строкой'0'. - В приложении на PHP при обработке результатов важно учитывать тип.
$row['quantity']может быть строкой'0', целым числом0илиnull.
Пример с PDO и явной проверкой:
$stmt = $pdo->prepare("SELECT * FROM products WHERE stock = :stock");
$stmt->execute(['stock' => 0]);
$zeroStockProducts = $stmt->fetchAll();
// Для обработки, где NULL тоже считается пустым
$stmt = $pdo->prepare("SELECT * FROM products WHERE COALESCE(stock, 0) = 0");
$stmt->execute();
$outOfStockProducts = $stmt->fetchAll();
Функция COALESCE(stock, 0) подменяет NULL на 0, что упрощает условие.