Y at-il un moyen d'écrire une instruction préparée où une valeur est comparée à une autre valeur dans une condition et je ne sais pas, si cette valeur est NULL
ou non.Écrire une instruction préparée avec des valeurs Null dans des conditions
SELECT `foo` FROM `bar` WHERE `a1` = :a1 AND `a2` = :a2
Si j'utiliser cette déclaration préparée avec a1 => null
et a2 => 42
, la requête résultante serait:
SELECT `foo` FROM `bar` WHERE `a1` = NULL AND `a2` = '42'
Ceci est, bien sûr, pas ce que je veux. Je besoin de cela dans ce cas:
SELECT `foo` FROM `bar` WHERE `a1` IS NULL AND `a2` = '42'
^^
Les deux a1
et a2
sont annulable. Je ne veux pas définir 4 préparer des déclarations:
-- I would use this, if both values are not null
SELECT `foo` FROM `bar` WHERE `a1` = :a1 AND `a2` = :a2
-- and this, if the expected value of a1 is null
SELECT `foo` FROM `bar` WHERE `a1` IS NULL AND `a2` = :a2
-- and this, if the expected value of a2 is null
SELECT `foo` FROM `bar` WHERE `a1` = :a1 AND `a2` IS NULL
-- and this, if I would expect both values to be null
SELECT `foo` FROM `bar` WHERE `a1` IS NULL AND `a2` IS NULL
Je vous remercie! Je ne savais pas cet opérateur (et aurait pu figurer la solution avec le 'OU' moi-même ..!) – stofl
@stofl: Je suis content que vous ayez trouvé cela utile. Pour mettre en évidence quelque chose que je n'ai peut-être pas suffisamment souligné ... que ** '<=>' ** L'opérateur de comparaison est une extension * non standard * disponible * seulement * dans MySQL. (Au moins, je ne connais aucun autre SGBD qui supporte cet opérateur. – spencer7593
Merci d'avoir mentionné cela. Ce n'est pas pertinent dans mon cas, car nous ne restons pas indépendants de toute façon. – stofl