SQL запрос, возвращающий значения, не существующие в таблице из набора в (скобки)

#sql #tsql

#sql #tsql

Вопрос:

Необходимо получить значения, которых нет в таблице, перечисленные прямо в запросе TSQL

Таблица городов

create table Cities (Id int, City nvarchar (max))
insert into Cities values
(1, 'New York'),
(2, 'Moscow'),
(3, 'Mexico'),
(4, 'Kuala-Lampur')

Теперь мне нужно извлечь города, которые существуют в наборе (‘Лос-Анджелес’, ‘Москва’, ‘Осло’), но не существуют в таблице городов. Итак, мне нужен результат:

  • Лос-Анджелес
  • Олсо

Я знаю, что самый простой способ — использовать временную таблицу, например

 declare @temp table (City nvarchar (max))
insert into @temp values
(Los Angeles),
(Moscow),
(Oslo)

Select City from @temp
where City not in (Select City from Cities)
  

Но, может быть, есть способ избежать временной таблицы?

Ответ №1:

Вы можете использовать производную таблицу, заполненную VALUES .

 SELECT *
       FROM (VALUES ('Los Angeles'),
                    ('Moscow'),
                    ('Oslo')) given_cities (city)

       WHERE given_cities.city NOT IN (SELECT cities.city
                                              FROM cities);