Использую СУБД PostgreSQL.
Для примера, есть таблица
1 столбец - имя владельца
2 столбец - название авто
CREATE TABLE cars (
id INT NOT NULL,
name VARCHAR(30) NOT NULL,
car VARCHAR(30)
);
INSERT IGNORE INTO cars
(id, name, car)
VALUES
(1,'John', 'BMW'),
(2,'Mike', 'BMW'),
(3,'John', 'OPEL'),
(3,'John', 'KIA')
Есть набор названий авто ['BMW', 'KIA'], нужно найти владельцев, которые владели всеми этими авто.
Придумал 2 варианта реализации:
SELECT name
FROM cars
WHERE car = 'BMW'
INTERSECT
SELECT name
FROM cars
WHERE car = 'KIA'
Либо
SELECT name
FROM cars
WHERE car = ANY(ARRAY['BMW', 'KIA'])
GROUP BY name
HAVING COUNT(name) = 2
Вопрос, есть ли другие более оптимальные и простые варианты реализации