我如何在 Where 子句中使用 IFNULL
How can i use IFNULL in Where clause
我想以这样一种方式使用 IFNULL()
,即我可以 select 包含 NULL 的记录,或者,如果存在值,则 select 匹配特定值的记录。
我的查询是:
SELECT (@v:=2) AS Row, CL.LeaveTypeId, CL.NumberOfLeave
FROM `CompanyLeave` CL
WHERE(IFNULL(CL.EmploymentType,0)=3);
列 EmploymentType
可以包含 Integer
或 NULL
。
我要 select 匹配指定值的记录,或者,如果 none 匹配,则包含 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;
这将 return 包含 3
的行(如果存在)。否则,它会 return 一行 NULL
,如果存在的话。
您可以使用 IF 语句 代替 IFNULL()
IF(condition, expres1, expres2)
表示如果满足条件则return 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 IS NULL
则使用3
。如果不是NULL
,则使用CL.EmploymentType
的原始值。
如果我对你的问题的理解正确,你需要 select CL.EmploymentType
列中具有 NULL
或 3
的行。
查询是:
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 documentation about NULL
说:
When doing an ORDER BY
, NULL
values are presented first if you do ORDER BY ... ASC
and last if you do 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
我想以这样一种方式使用 IFNULL()
,即我可以 select 包含 NULL 的记录,或者,如果存在值,则 select 匹配特定值的记录。
我的查询是:
SELECT (@v:=2) AS Row, CL.LeaveTypeId, CL.NumberOfLeave
FROM `CompanyLeave` CL
WHERE(IFNULL(CL.EmploymentType,0)=3);
列 EmploymentType
可以包含 Integer
或 NULL
。
我要 select 匹配指定值的记录,或者,如果 none 匹配,则包含 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;
这将 return 包含 3
的行(如果存在)。否则,它会 return 一行 NULL
,如果存在的话。
您可以使用 IF 语句 代替 IFNULL()
IF(condition, expres1, expres2)
表示如果满足条件则return 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 IS NULL
则使用3
。如果不是NULL
,则使用CL.EmploymentType
的原始值。
如果我对你的问题的理解正确,你需要 select CL.EmploymentType
列中具有 NULL
或 3
的行。
查询是:
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 documentation about NULL
说:
When doing an
ORDER BY
,NULL
values are presented first if you doORDER BY ... ASC
and last if you doORDER 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