如果value为null,则为mysql conditional where子句

时间:2014-03-25 10:05:06

标签: mysql

假设:

id  | f1 |   f2
---------------
 1  |  x |    y
 2  |  x | null

如果我的搜索项是var1 = x和var2 = y,我需要选择第1行,如果var1 = x且var2为null,则需要选择2。

这是我到目前为止所尝试的:

SELECT @var1:='x', @var2:=NULL;
SELECT  *
FROM datatable
WHERE f1 = @country
AND CASE @var2
    WHEN NOT NULL THEN f2 = @var2
    ELSE f2 = @var2
END;

也尝试过:

SELECT @var1:='x', @var2:=NULL;
SELECT  *
FROM datatable
WHERE f1 = @var1
AND f2 = IFNULL(@var2,NULL);

我是否需要一个工会才能实现这一点,或者我错过了一个可以使我尝试过的工作的小调整?

1 个答案:

答案 0 :(得分:1)

您可以安全地与<=>进行NULL比较:

SELECT 
  * 
FROM 
  datatable 
WHERE 
  f1<=>@var1 
  AND 
-- this will compare with NULL properly:
  f2<=>@var2

那就像:

mysql> select @var1,@var2;
+-------+-------+
| @var1 | @var2 |
+-------+-------+
| x     | y     |
+-------+-------+
1 row in set (0.00 sec)

mysql> select * from test where f1<=>@var1 and f2<=>@var2;
+------+------+------+
| id   | f1   | f2   |
+------+------+------+
|    1 | x    | y    |
+------+------+------+
1 row in set (0.00 sec)