@nevro
не пойми кто

Можно ли IN заменить подзапросом?

Таблица отелей:
id | name | cityId

Таблица городов:
id | name

Задача: выбрать все отели, находящиеся в городе Москва, например.
Решение: SELECT * FROM hotels WHERE cityId = 12
Проблема: Москва может быть не одна (в данном примере не учитываем страну), кроме того может писаться еще и латиницей.
Новое решение:
1.
SELECT * FROM cities WHERE name = 'Москва' or name = 'Moscow';

Получил набор записей. Вручную скопировал их айдишники в:
2. SELECT * FROM hotels WHERE cityId in (12, 19, 23)
Таких айдишников может быть много. Было бы здорово автоматизировать через подзапрос, но подзапрос должен возвращать только одно значение (только начал читать Грабера). Если добавить GROUP BY, то подзапрос вернут только одно значение.
Но ведь WHERE c IN ведет себя как цикл, перебирает "массив" кодов... Как реализовать?
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ответы на вопрос 1
@karminski
Senior React.JS Developer
SELECT * FROM hotels WHERE cityId IN (SELECT id FROM cities WHERE name = 'Москва' or name = 'Moscow')
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы