Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Запрос с использованием массива  [new]
polin11
Member

Откуда:
Сообщений: 144
Использую СУБД PostgreSQL.
Для примера, есть таблица
1 столбец - имя владельца
2 столбец - название авто
CREATE TABLE cars (
  id INT NOT NULL,
  name VARCHAR(30) NOT NULL,
  car VARCHAR(30)
);

INSERT 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


Вопрос, есть ли другие более оптимальные и простые варианты реализации
15 июл 20, 11:29    [22167655]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с использованием массива  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4233
polin11
Использую СУБД PostgreSQL.
Для примера, есть таблица
1 столбец - имя владельца
2 столбец - название авто
CREATE TABLE cars (
  id INT NOT NULL,
  name VARCHAR(30) NOT NULL,
  car VARCHAR(30)
);

INSERT 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


Вопрос, есть ли другие более оптимальные и простые варианты реализации


второй - самый простой и оптимальный, куда уж проще то.
15 июл 20, 13:47    [22167803]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить