2015-01-16 20 views
2

我想用IFNULL()這樣一種方式,即我可以選擇包含NULL的記錄,或者如果存在值,則選擇與某個特定值匹配的記錄。我如何在Where子句中使用IFNULL

我的查詢是:

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

EmploymentType可以包含一個或IntegerNULL

我想選擇匹配指定值的記錄,或者,如果沒有匹配,則記錄包含NULL

+0

你是什麼意思與'返回的東西else'? – BendEg

+0

請編輯您的問題樣本數據和所需的結果。 –

+0

你的代碼是正確的,應該可以工作。 –

回答

2

我正在將此問題解釋爲優先級。如果存在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(如果存在)。

+0

謝謝我在查詢中使用了這種方式,我得到了我想要的結果。 –

1

可以使用語句IF代替IFNULL()

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; 
0

表達IFNULL(CL.EmploymentType, 3)的基本含義:如果CL.EmploymentType IS NULL則改爲使用3。如果它不是NULL,則使用原始值CL.EmploymentType

如果我正確理解您的問題,您需要選擇列CL.EmploymentType中具有NULL3的行。
查詢是:

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說:

在做一個ORDER BY,如果你這樣做ORDER BY ... ASCNULL值首先提出並最後,如果你做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