Есть ли функция на сервере sql "isEmpty", возвращающая данные, если выбор возвращает пустой набор результатов

у меня такая таблица

EmpId  No_of_days
  1       24
  2       28
  6       24
  7       30
  8       10
  9       15

когда я пишу оператор выбора

SELECT No_of_days FROM _table WHERE EmpId = 3 or 4 or 5

Я получил пустой набор результатов.

Я хочу, чтобы набор результатов возвращал 0 дней для сотрудников 3, 4 и 5.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
100
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

использовать coalesce

   select coalesce(No_of_days,0) 
  from _table WHERE EmpId in( 3 , 4 , 5)

Кстати, используйте In вместо or, и если вам нужно вставить этот идентификатор в EmpId 1-й, тогда Coalesce() будет работать иначе, если в empid нет значений, тогда он не будет работать

Как это будет работать? Если нет строк для EmpID 3, 4 или 5, набор данных все равно не вернет строк. ОП ищет не общий агрегат, а агрегат в каждом empID.

Larnu 05.03.2019 11:52

это означает, что я сначала знаю пустые идентификаторы? как это будет работать для тысяч записей? 3, 4 и 5 - это только примеры, которых нет в реальном мире.

Mariam Nagy 05.03.2019 11:58

Вы можете использовать конструкцию values() и делать left join :

select tt.empid, isnull(t.No_of_days, 0)
from ( values (3), (4), (5) 
     ) tt (empid) left join
     table t
     on t.empid = tt.empid;

РЕДАКТИРОВАТЬ : Если у вас больше идентификатора employees, вам нужно поддерживать одну промежуточную таблицу и делать left join:

select tt.empid,
       ISNULL(t.No_of_days, 0)
from table tt left join -- possible employee id table
     [_table] t
     on t.empid = tt.empid;

это означает, что я сначала знаю пустые идентификаторы? как это будет работать для тысяч записей? 3, 4 и 5 - это только примеры, которых нет в реальном мире.

Mariam Nagy 05.03.2019 11:58
Ответ принят как подходящий

Предполагая, что у вас есть другая таблица со всеми вашими сотрудниками (если нет, то откуда берутся сотрудники 3, 4 и 5?), вы можете использовать LEFT JOIN в своей примерной таблице (_table):

SELECT e.empid,
       ISNULL(t.No_of_days,0)
FROM Employee e --No idea what your employee table is actually called, so guessed.
     LEFT JOIN _table t ON e.empid = t.empid;

Это предоставит строки для всех ваших сотрудников. Если бы вы хотели только 3, 4 и 5, вы бы добавили свой WHERE:

 WHERE e.empid IN (3,4,5)

Другие вопросы по теме