假设:
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);
我是否需要一个工会才能实现这一点,或者我错过了一个可以使我尝试过的工作的小调整?
答案 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)