Как отобразить нулевые значения в операторе IN для SQL с двумя условиями в где

#sql #select

Вопрос:

У меня есть такой запрос

 select *  from dbo.EventLogs where EntityID = 60181615   and EventTypeID in (1, 2, 3, 4, 5)   and NewValue = 'Received'  

Если 2 и 4 не существуют с новым значением «Получено», это показывает следующее

текущие результаты

Чего я хочу

Ответ №1:

В идеале вы должны где-то хранить таблицу, содержащую все возможные EventTypeID значения. Без этого мы можем использовать CTE на месте вместе с левым соединением:

 WITH EventTypes AS (  SELECT 1 AS ID UNION ALL  SELECT 2 UNION ALL  SELECT 3 UNION ALL  SELECT 4 UNION ALL  SELECT 5 )  SELECT et.ID AS EventTypeId, el.* FROM EventTypes et LEFT JOIN dbo.EventLogs el  ON el.EntityID = 60181615 AND  el.NewValue = 'Received' WHERE  et.ID IN (1,2,3,4,5);  

Комментарии:

1. Я создал таблицу со всеми возможными типами событий

2. Затем замените EventTypes в моем ответе эту таблицу.