ivanchurkin
@ivanchurkin
Зануда

Как реализовать следующий SQL-запрос?

Первая таблица "places".

id serial not null PKey,
nm text,
param1 integer not null,
param2 integer not null,
param3 integer not null,
...
param4 integer not null

Вторая таблица "equi".

id serial not null PKey,
name text

Третья таблица "example" (places <->> equi)

place_id integer not null FKey (place),
equi_id integer not null FKey (equi)

В третьей таблицы обе колонки образуют первичный ключ.

Необходимо выбрать такие записи из таблицы "places", которым будут соответствовать n-параметров из этой же таблицы:
SELECT id FROM places WHERE param1 = 5 ... paramN = 3

и ПРИ ЭТОМ n-записей из таблицы "example".

Под соответствием понимается что для конкретного id из "places" выполняются как WHERE places.param1 = 5 AND ... AND places.paramN = 3, так и WHERE example.equi_id = 7, только вот example.equi_id может быть n-ое количество. И как это оформить в запрос я не понимаю.

Надеюсь объяснил понятно. Заранее спасибо!
  • Вопрос задан
  • 289 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT id 
    FROM places p
    JOIN (
        SELECT place_id 
            FROM example 
            WHERE equi_id IN (1, 2, 3)
            GROUP BY place_id
            HAVING COUNT(place_id) = 3
        ) e ON e.place_id = p.id
    WHERE p.param1 = 1 AND p.param2 = 2
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы