Всем доброго времени суток и в данной статье мы с вами рассмотрим как сравнивать значения одного запроса с другим. И давайте сразу же рассмотрим пример.
Допустим у нас есть две таблицы.
tovar
id tovar
1 samsung
2 honda
3 sony
4 sony
5 nike
6 samsung
======================
table2
id id_tovar country
1 2 Japan
2 5 USA
3 6 Korea
Как видите в первой таблице у нас указаны бренды , а во второй страны производители. Эти две таблицы между собой связаны полями id и id_tovar.
Ситуация нам нужно достать бренд по стране производителю , как мы это реализуем.
Допустим страна производитель будут у нас Соединенные штаты USASELECT `tovar` FROM `tovar` WHERE `id` = ALL(SELECT `id_tovar` FROM `table2` WHERE `country` = 'USA')
Как видите мы достали американский бренд nike. Давайте теперь подробнее разберем запрос.
Первая часть запроса нам понятна мы из таблицы tovar достаем поле `tovar`.
Вторая часть запроса немного запутана, где поле id равняется и дальше идет ключевое слово ALL, а дальше в круглых скобочках идет подзапрос. Так вот ключевое слово ALL означает что мы все значения , которые достанет нам подзапрос (SELECT `id_tovar` FROM `table2` WHERE `country` = 'USA') будут сравниваться со значением `id`( в качестве сравнения могут также выступать и другие операторы(<>, >, <, <=, >= и т.п.))
SELECT `tovar` FROM `tovar` WHERE `id` = ALL(SELECT `id_tovar` FROM `table2` WHERE `country` = 'USA')
Каждое значение строки поля `id_tovar` которое достает нам внутренний запрос в круглых скобках, проверяется на присутствие в поле `id` таблицы `tovar`.
В результате нам возвращается результат внешнего запроса
SELECT `tovar` FROM `tovar` WHERE `id` = ALL - внешний запрос
SELECT `id_tovar` FROM `table2` WHERE `country` = 'USA' - внутренний запрос
Надеюсь что данная статья была вам понятна и интересна. Удачи!