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