#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 искал гибкое решение, чтобы исключить подход, основанный на ЦЕННОСТИ. Я нахожу ТВП громоздкими.