Можно ли в sql получить результат который не найден?

Можно ли в sql получить результат который не найден?

SELECT name FROM `names` WHERE name IN ('vasya','json','liza','vladimir','andrey'); 

возвращает:

vasya
liza

а как сделать, чтобы возвращало:

json
vladimir
andrey

?

Работает так:

WITH vals (Name) AS (VALUES ('vasya'),('json'),('liza'),('vladimir'),('andrey')))
SELECT Name FROM  vals
WHERE Name NOT IN (
  SELECT * 
  FROM `Names`
  WHERE Name IN (SELECT * FROM vals)
)

Ответы (2 шт):

Автор решения: SwaD

Для того, что вывести результат, обратный найденному, используется отрицание NOT

SELECT name 
FROM `names` 
WHERE name NOT IN ('vasya','json','liza','vladimir','andrey');

И теперь запрос читается, как, Выведи значения поля name, где name не содержит следующие значения

→ Ссылка
Автор решения: newman

Самый оптимальный вариант, наверное, был бы с использованием временной таблицы. Создать ее, сохранить туда эти имена как константы.

CREATE TABLE temp_names (`name` varchar(16));
INSERT INTO temp_names VALUES ('vasya'), ('json'), ('liza'), ('vladimir'), ('andrey');

и дальше уже использовать вложенные запросы:

  SELECT `name` 
  FROM `temp_names` 
  WHERE `name` NOT IN (
    SELECT `name` FROM `names` WHERE name IN (
      SELECT `name` FROM `temp_names`
    )
  )

Вот пример: http://sqlfiddle.com/#!9/1161d4/3

Хотя в общем-то можно написать и короче.

  SELECT `name` 
  FROM `temp_names` 
  WHERE `name` NOT IN (
    SELECT `name` FROM `names`
  )

Но на больших таблицах может работать медленей первого варианта.

Если временные таблицы не подходят, то можно попробовать вариант создания такой таблицы прямо в запросе.

SELECT `name` FROM 
(SELECT 'vasya' AS `name` 
     UNION SELECT 'json' AS `name` 
     UNION SELECT 'liza' AS `name`
     UNION SELECT 'vladimir' AS `name`
     UNION SELECT 'andrey' AS `name`
) AS t 
   WHERE `name` NOT IN (
     SELECT `name` FROM `names`
   );

Это вариация предыдущего варианта, только константы берутся не из временной таблицы, а формируются в запросе.

Пример: http://sqlfiddle.com/#!9/04613b/4

→ Ссылка