Не могу написать SQL запрос [дубликат]

214
07 марта 2017, 15:00

Данный вопрос уже был задан и имеет решение:

  • Не могу написать правильный SQL запрос 1 ответ

Уже третий час ломаю голову как написать правильный запрос, но ничего не выходит.
Задача такая:
Есть таблица автомобилей

auto (автомобили)
id | name
-------------
1  | Volvo
2  | Audi
3  | Toyota

Есть таблица запчастей

spare (запчасти)
id | name
-------------
1  | Колеса
2  | Двигатель
3  | Руль

Есть many to many таблица для соединение запчастей и автомобилей

spare_to_auto
auto_id | spare_id
------------------
1       | 1
1       | 2
1       | 3
2       | 1
2       | 2

Нужно получить список автомобилей у которых список запчастей совпадает от двух и более. И еще их нужно отсортировать в порядке совпадения от большего к меньшему. Список запчастей задает пользователь в фильтре

Вот что у меня получилось в итоге

SELECT * 
FROM auto as a
INNER JOIN spare_to_auto AS s_to_a
ON a.id = s_to_a.auto_id
INNER JOIN spare AS s
ON s_to_a.spare_id = s.id AND s.id IN ($список_запчастей)
GROUP BY a.id

Но к сожаление работает это запрос не правильно.

Answer 1
select name from auto as a
inner join (
  select i1.auto_id,count(1) as count from spare_to_auto as i1 
  inner join spare_to_auto as i2 on i1.spare_id=i2.spare_id 
  and i1.auto_id<>i2.auto_id
  group by i1.auto_id) as b
on a.id=b.auto_id and b.count>1
Answer 2
SELECT * 
  FROM auto as a
 INNER JOIN spare_to_auto AS s_to_a ON a.id = s_to_a.auto_id
 WHERE s_to_a.spare_id IN ($список_запчастей)
 GROUP BY a.id
HAVING count(1)>1
 ORDER BY count(1) desc

Таблицу spare из запроса я убрал, так как выборка идет по ID запчастей, которые и так уже есть в spare_to_auto. Кстати, поиск всех запчастей отличается только изменением условия в having на равенство количеству искомых.

READ ALSO
Редактирование многострочной команды MySQL

Редактирование многострочной команды MySQL

Копирую чужую команду для MySQL в терминал, состоит из нескольких строкКак мне переместиться на верхние строки и редактировать их?

253
JavaFX. Переменная в FXML

JavaFX. Переменная в FXML

Доброго времени суток!

345
JFrame и просто оконные приложения на Java

JFrame и просто оконные приложения на Java

Доброго времени суток! Недавно заинтересовался оконными приложениями на Java, но наткнулся на некоторое количество типов самих приложенийХотел...

324
Координаты Scene2D

Координаты Scene2D

Я использую FitViewport с виртуальным размером 1920х1080

270