4

IFNULL()NULL を含むレコードを選択したり、値が存在する場合は特定の値に一致するレコードを選択したりできるように使用したいと考えています。

私のクエリは次のとおりです。

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

列にはまたはEmploymentTypeのいずれかを含めることができます。IntegerNULL

指定した値に一致するレコードを選択するか、一致しない場合は を含むレコードを選択しますNULL

4

3 に答える 3

4

私は質問を優先順位付けとして解釈しています。のレコードが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ます。

于 2015-01-16T13:19:10.227 に答える
4

IFNULL(CL.EmploymentType, 3)は基本的に次のことを意味CL.EmploymentType IS NULLします3。でない場合は、 の元の値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;

アップデート:

1 つの行のみを返す必要がある場合 ( を持つ行3よりも優先される行)、値を前にNULL置く基準を使用して行を並べ替え、句を追加する必要があります。NOT NULLLIMIT 1

MySQLのドキュメントについてNULLは次のように述べています。

を実行する場合、実行するORDER BYNULL値が最初に表示され、実行する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
于 2015-01-16T13:27:16.183 に答える
1

IFNULL()の代わりにIF ステートメントを使用できます

IF(condition, expres1, expres2) 

条件が満たされた場合は expres1 を返すことを意味し、それ以外の場合は expres2 を返します

SELECT (@v:=2) AS Row, CL.LeaveTypeId, CL.NumberOfLeave
FROM `CompanyLeave` CL
WHERE IF(CL.EmploymentType IS NULL, 0, CL.EmploymentType) = 3;
于 2015-01-16T13:19:21.457 に答える