Поиск несоответствующих значений в одной строке таблицы

#sql #amazon-web-services #amazon-redshift

#sql #amazon-веб-сервисы #amazon-redshift

Вопрос:

У меня есть таблица с именем laptops с несколькими строками. 3 поля, которые у меня есть, плюс 4 примерных строки, являются:

 item_id  |  operating_system   |   item_title
------- ------------- -------------
1     | Windows 10 | Toshiba with Windows 10 Pro and a mouse
2     | Windows 10 Pro | HP with Windows 10 Pro
3     | Linux | Dell with Windows 10
4     | iOS 11 | Random Apple laptop
  

Что мне нужно, так это решить следующие варианты использования:

  1. Получить несоответствия: извлекать только те строки, в которых операционная система, отображаемая как часть item_title, НЕ совпадает с той, которая указана в operating_system. item_title будет содержать в виде строки любую другую операционную систему в столбце operating_system. Это относится к идентификаторам # 1 и # 3
  2. Строковые значения внутри других значений: Некоторые строковые значения operating_system включены в другие большие значения. Например, кто-то может сказать, что идентификатор # 1 правильный, потому что в item_title отображается ‘Windows 10’, НО ЭТО НЕ так, потому что фактическое значение там ‘Windows 10 Pro’, так что это тоже несоответствие.

Честно говоря, я совершенно не понимаю, как это сделать, я запустил запрос типа:

 SELECT * FROM laptops
WHERE item_name NOT LIKE ('%' operating_system '%')
  

но мои знания SQL ограничены, и я не знаю, как реализовать 2 варианта использования, которые я представил.

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

1. у вас есть список (таблица) известных и допустимых операционных систем?

2. Все значения в столбце operating_system должны быть действительными и источником истины в этом случае. Проблема заключается в несоответствии с заголовком элемента.

Ответ №1:

Как насчет:

 SELECT
  item_name
FROM laptops
WHERE item_title NOT LIKE '%' || operating_system || '%'
  

Например, это привело бы к:

 WHERE 'HP with Windows 10 Pro' NOT LIKE '%Windows 10 Pro%'