Как я могу использовать 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;
Другие вопросы по тегам