mysql条件where子句if值是否为null

标签 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);

我是否需要一个工会来实现这一目标,还是我错过了一个小调整,可以让我所尝试的工作发挥作用?

最佳答案

您可以安全地与 <=> 进行 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)

关于mysql条件where子句if值是否为null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22631169/

相关文章:

mysql - 将大型分隔文件导入 MySQL 表并添加新标识符

php - 在 mysql 中获取行创建/更新时间戳/日期

mysql - 客户端应用程序和 MySQL GPL

php - 帮助计算行数

php - MYSQL查询复制行

php - MYSQL删除字段不属于数组的地方

mysql - 使用 node.js、express 和 jade 中的 mysql 值填充选择菜单

PHP 移动 mySQL 树节点

php - mysql 在数据库中调整日期时间值,而不是在搜索返回中

mysql - 检查任一列是否为空