ISNULL (значение, 0) в предложении WHERE MYSQL

У меня есть такие запросы:

SELECT sc.no, scl.quantite, scl.description, scl.poids, scl.prix, sl_ref.refsl, sl_ref.codetva, sl_ref.tauxtva, sl_ref.compte 
FROM shop_commande 
AS sc, shop_commande_ligne AS scl, selectline_ref AS sl_ref 
WHERE sc.id = scl.shop_commande_id 
AND sl_ref.refshop = ISNULL(scl.shop_article_id, 0) 
AND sc.id NOT IN (SELECT id_command FROM selectline_flag)

Иногда в sl_shop_article_id есть значение NULL. Я хочу заменить его на 0, поэтому пункт:

sl_ref.refshop = scl.shop_article_id

может работать, даже если scl.shop_article_id имеет значение NULL. Для этого я попытался использовать функцию ISNULL, но это делает запрос неправильным, и я получаю ошибку:

1582 – Неверный счетчик параметров при вызове встроенной функции ISNULL

Как я могу его использовать?


person Maloz    schedule 21.03.2017    source источник


Ответы (2)


Я полагаю, вы пытаетесь использовать функцию IFNULL(). ЕСЛИ вы заменили ISNULL на IFNULL, это должно исправить ваш запрос.

Я предлагаю вам сделать еще один шаг и использовать COALESCE() вместо IFNULL(), поскольку COALESCE() является частью стандарта SQL (а IFNULL() — нет).

SELECT sc.no, scl.quantite, scl.description, scl.poids, 
scl.prix, sl_ref.refsl, sl_ref.codetva, sl_ref.tauxtva, sl_ref.compte 
FROM shop_commande 
AS sc, shop_commande_ligne AS scl, selectline_ref AS sl_ref 
WHERE sc.id = scl.shop_commande_id 
AND sl_ref.refshop = COALESCE(scl.shop_article_id, 0) 
AND sc.id NOT IN (SELECT id_command FROM selectline_flag)
person Ike Walker    schedule 21.03.2017
comment
Работает очень хорошо, и сейчас я не говорил о COALESCE, так что спасибо! - person Maloz; 21.03.2017

person    schedule
comment
Вы можете увидеть разницу между функциями ISNULL() и IFNULL() здесь w3schools.com/sql/sql_isnull.asp - person Juan Carlos Oropeza; 21.03.2017
comment
Спасибо за ссылку и быстрый ответ! Как сказал Айк, COALESCE является частью стандарта SQL, я воспользуюсь его ответом, но ваш тоже отлично работает! - person Maloz; 21.03.2017