4
有没有办法编写一个准备好的语句,其中的值与条件中的另一个值进行比较,我不知道这个值是否为NULL
。在条件中编写一个可以为空的值的准备语句
SELECT `foo` FROM `bar` WHERE `a1` = :a1 AND `a2` = :a2
如果我会使用与a1 => null
和a2 => 42
这个准备好的语句,然后将得到的查询是:
SELECT `foo` FROM `bar` WHERE `a1` = NULL AND `a2` = '42'
这当然不是我想要的。我需要这种在这种情况下:
两个a1
和a2
可为空。我不想定义4个准备的语句:
-- 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
谢谢!不知道那个操作员(并且可以用自己的'OR'算出解决方案..!) – stofl
@stofl:很高兴你发现这有帮助。突出一些我可能没有充分强调的东西...... **'<=> **比较运算符是MySQL中可用的*非标准*扩展*只*。 (至少,我不知道有任何其他DBMS支持这个操作符。) – spencer7593
谢谢你提到这一点。这与我的情况无关,因为我们不会一直保持dbms独立。 – stofl