Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在Where子句中使用IFNULL_Mysql_Sql_Ifnull - Fatal编程技术网

Mysql 如何在Where子句中使用IFNULL

Mysql 如何在Where子句中使用IFNULL,mysql,sql,ifnull,Mysql,Sql,Ifnull,我希望使用IFNULL(),这样我可以选择包含NULL的记录,或者,如果存在值,则选择与特定值匹配的记录 我的问题是: SELECT (@v:=2) AS Row, CL.LeaveTypeId, CL.NumberOfLeave FROM `CompanyLeave` CL WHERE(IFNULL(CL.EmploymentType,0)=3); SELECT (@v:=2) AS Row, CL.LeaveTypeId, CL.NumberOfLeave FROM `CompanyLea

我希望使用
IFNULL()
,这样我可以选择包含NULL的记录,或者,如果存在值,则选择与特定值匹配的记录

我的问题是:

SELECT (@v:=2) AS Row, CL.LeaveTypeId, CL.NumberOfLeave
FROM `CompanyLeave` CL
WHERE(IFNULL(CL.EmploymentType,0)=3);
SELECT (@v:=2) AS Row, CL.LeaveTypeId, CL.NumberOfLeave
FROM `CompanyLeave` CL
WHERE IFNULL(CL.EmploymentType, 3) = 3;
SELECT (@v:=2) AS Row, CL.LeaveTypeId, CL.NumberOfLeave
FROM `CompanyLeave` CL
WHERE IFNULL(CL.EmploymentType, 3) = 3;
ORDER BY CL.EmploymentType DESC
LIMIT 1
EmploymentType
可以包含
整数
NULL


我想选择与指定值匹配的记录,或者,如果没有匹配的记录,则选择包含
NULL

的记录。我将问题解释为优先级排序。如果存在
3
的记录,请选择该记录。否则,请选择一个
NULL
(如果存在)

如果是这样,这可能会满足您的要求:

SELECT (@v:=2) AS Row, CL.LeaveTypeId, CL.NumberOfLeave
FROM `CompanyLeave` CL
WHERE CL.EmployementType = 3 or CL.EmployementType IS NULL
ORDER BY (CL.EmployementType = 3) DESC
LIMIT 1;

这将返回带有
3
的行(如果存在)。否则,如果存在
NULL
,它将返回一行。

您可以使用if语句而不是IFNULL()

这意味着如果满足条件,则返回expres1 else expres2

SELECT (@v:=2) AS Row, CL.LeaveTypeId, CL.NumberOfLeave
FROM `CompanyLeave` CL
WHERE IF(CL.EmploymentType IS NULL, 0, CL.EmploymentType) = 3;

表达式
IFNULL(CL.EmploymentType,3)
的基本意思是:如果
CL.EmploymentType为NULL,则使用
3
。如果
CL.EmploymentType
的原始值不是
NULL
,则使用该值

如果我正确理解了您的问题,您需要在
CL.EmploymentType
列中选择
NULL
3
的行 查询是:

SELECT (@v:=2) AS Row, CL.LeaveTypeId, CL.NumberOfLeave
FROM `CompanyLeave` CL
WHERE(IFNULL(CL.EmploymentType,0)=3);
SELECT (@v:=2) AS Row, CL.LeaveTypeId, CL.NumberOfLeave
FROM `CompanyLeave` CL
WHERE IFNULL(CL.EmploymentType, 3) = 3;
SELECT (@v:=2) AS Row, CL.LeaveTypeId, CL.NumberOfLeave
FROM `CompanyLeave` CL
WHERE IFNULL(CL.EmploymentType, 3) = 3;
ORDER BY CL.EmploymentType DESC
LIMIT 1
更新:

如果只需返回一行(具有
3
的行优先于具有
NULL
的行),则必须使用将
NOT NULL
值放在前面的条件对行进行排序,并且必须添加
LIMIT 1
子句

MySQL说:

执行按
排序时,如果执行按排序,则首先显示
NULL
值。。。ASC和最后一个,如果您按。。。描述

更新后的查询是:

SELECT (@v:=2) AS Row, CL.LeaveTypeId, CL.NumberOfLeave
FROM `CompanyLeave` CL
WHERE(IFNULL(CL.EmploymentType,0)=3);
SELECT (@v:=2) AS Row, CL.LeaveTypeId, CL.NumberOfLeave
FROM `CompanyLeave` CL
WHERE IFNULL(CL.EmploymentType, 3) = 3;
SELECT (@v:=2) AS Row, CL.LeaveTypeId, CL.NumberOfLeave
FROM `CompanyLeave` CL
WHERE IFNULL(CL.EmploymentType, 3) = 3;
ORDER BY CL.EmploymentType DESC
LIMIT 1

使用
返回其他内容是什么意思?
?请使用示例数据和所需结果编辑您的问题。您的代码是正确的,应该可以工作。谢谢我在查询中使用这种方式,我得到了我想要的结果。