该表达式的IFNULL(CL.EmploymentType, 3)基本意思是:if CL.EmploymentType IS NULLthen use 3instead。CL.EmploymentType如果不是,则使用 的原始值NULL。
如果我正确理解您的问题,您需要选择具有NULL或3列的行CL.EmploymentType。
查询是:
SELECT (@v:=2) AS Row, CL.LeaveTypeId, CL.NumberOfLeave
FROM `CompanyLeave` CL
WHERE IFNULL(CL.EmploymentType, 3) = 3;
更新:
如果必须只返回一行(具有3优先于具有NULL的行),则必须使用将NOT NULL值放在前面的标准对行进行排序,并且LIMIT 1必须添加一个子句。
关于MySQL的文档NULL说:
执行时,如果您执行ORDER BY,NULL则首先显示值,如果执行ORDER BY ... ASC,则最后显示值ORDER BY ... DESC。
更新后的查询是:
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