#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
Что мне нужно, так это решить следующие варианты использования:
- Получить несоответствия: извлекать только те строки, в которых операционная система, отображаемая как часть item_title, НЕ совпадает с той, которая указана в operating_system. item_title будет содержать в виде строки любую другую операционную систему в столбце operating_system. Это относится к идентификаторам # 1 и # 3
- Строковые значения внутри других значений: Некоторые строковые значения 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%'