Как я могу использовать IFNULL в предложении Where
Я хочу использовать IFNULL()
таким образом, чтобы я мог выбрать запись, содержащую NULL, или, если значение присутствует, затем выбрать запись, соответствующую определенному значению.
Мой запрос:
SELECT (@v:=2) AS Row, CL.LeaveTypeId, CL.NumberOfLeave
FROM `CompanyLeave` CL
WHERE(IFNULL(CL.EmploymentType,0)=3);
колонка EmploymentType
может содержать либо Integer
или же NULL
,
Я хочу выбрать запись, соответствующую указанному значению, или, если ничего не найдено, запись, содержащая NULL
,
3 ответа
Я интерпретирую вопрос как расстановку приоритетов. Если запись с 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
, если таковой существует.
Выражение 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;
Обновить:
Если должна быть возвращена только одна строка 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
Вы можете использовать оператор 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;