Выберите строку таблицы с требуемым значением, когда значение столбца, которого нет в таблице, выбрано в предложении where в ключевом слове?

#sql #sql-server #tsql #conditional-statements #where-clause

#sql #sql-сервер #tsql #условные утверждения #где-пункт

Вопрос:

У меня есть таблица с одним из столбцов в качестве идентификатора. У меня есть набор значений, которые я даю в предложении where для сравнения столбца » ID «с использованием ключевого слова «in». Я хочу выбрать строку, если значение в этом наборе значений имеет запись в таблице. Если нет, то значение, которого нет в таблице, должно быть выбрано вместе с пустыми значениями в других столбцах.

Например: Существует таблица со столбцами ID и Animal. В нем 8 записей.

Таблица со всеми записями

Если я выполню запрос:

 SELECT ID, Animal from #Temp1 where ID in (4,8)  

он вернет следующий результат.

Результат таблицы отфильтрован

Но, если я выполню запрос:

 SELECT ID, Animal from #Temp1 where ID in (4,8,12)  

он должен вернуть следующий результат.

Результат таблицы с желаемыми значениями

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

1. В соответствии с руководством по вопросам, пожалуйста, не размещайте изображения кода, данных, сообщений об ошибках и т.д. — Скопируйте или введите текст в вопрос. Пожалуйста, зарезервируйте использование изображений для диаграмм или демонстрации ошибок рендеринга, вещей, которые невозможно точно описать с помощью текста.

2. Использование IN здесь не будет полезным. Вам нужно внешне соединить вашу таблицу с нужным набором значений идентификаторов, чтобы принудительно включить те идентификаторы, которых нет в вашей фактической таблице. Подумайте об этом и попробуйте. И, пожалуйста, больше никаких изображений в качестве данных, особенно небольших размытых.

Ответ №1:

Вместо этого используйте a LEFT JOIN совместно с string_split()

 Select ID = A.value  ,Animal = coalesce(B.Animal,'ID Not Found')   From string_split('4,8,12',',') A  Left Join YourTable B on A.value=B.ID  

Результаты

 ID Animal 4 Donkey 8 Hampster 12 ID Not Found  

Если случайно string_split() недоступен

 Select ID = A.value  ,Animal = coalesce(B.Animal,'ID Not Found')   From (values (4)  ,(8)  ,(12)  ) A(value)  Left Join YourTable B on A.value=B.ID  

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

1. Если этот столбец идентификатора не является целым числом и если в качестве значения в нем указано 10-значное число, то как можно сформировать запрос? Например, если возможно, значение столбца «ИДЕНТИФИКАТОР» примерно такое «0000390110»

2. @VaishnaviSrinivas Int или строка … Это все равно будет работать. например, string_split(‘00004,00008,00012′,’,’) A или вторым подходом будут значения (‘00004’)

3. Я даже не могу себе представить, почему вы использовали STRING_SPLIT бы здесь, а не VALUES или параметр с табличным значением

4. @Charlieface Я ПРЕДСТАВЛЯЛ, что идентификаторы будут время от времени меняться, и OP искал гибкое решение, чтобы исключить подход, основанный на ЦЕННОСТИ. Я нахожу ТВП громоздкими.