2015-01-08 3 views
0

Я следующую структуру базы данных:Как запросить все строки, содержащие ВСЕ значения заданного отношения «многие-многие»? (! Не только один из них)

  • Таблица 1: Мебель (Поля: ID)
  • Таблица 2: Материал (поля: ID)
  • Таблица 3: MaterialMatching: (Поля: ID, FK_Furniture, FK_Material)

Эта структура способна связать множество материалов с каждой мебелью ...

Я знаю, как запросить всю мебель, что есть какой-то особый материал, в котором логическое отношение между материалами является OR:

select distinct(furniture.ID) from Furniture 
    left join MaterialMatching ON MaterialMatching.FK_Furniture = Furniture.ID 
    left join Material On Material.ID = MaterialMatching.FK_Material 
    where Material.ID IN (<< material ids I want to query>>) 

Вопрос

Как я могу запросить всю мебель, которые имеют все материалы? Я хочу получить всю мебель, которая имеет материал 1 и материал 2 И ...

+0

MySQL или SQLite? –

+0

На самом деле, я хотел бы знать это для обоих ... Но я меняю его на SQLite как основную систему SQL ... – prom85

+0

вы, вероятно, добавили реляционное разделение тегов ... С этим я мог бы найти решение ... – prom85

ответ

0

Это довольно грязное решение, но оно должно решить проблему. Он вернет всю мебель, которая имеет все связанные с ней материалы.

select f.* 
from Furniture f 
left join (select ftemp.id, count(distinct(mm.FK_Material)) matcount 
      from Furniture ftemp 
      left join MaterialMatching mm on mm.FK_Furniture = ftemp.ID 
      group by ftemp.id) mmtemp on f.id = mmtemp.id 
where mmtemp.matcount = (select count(1) from Material) 
Смежные вопросы