SQL-запрос от многих ко многим

0

У меня много отношения

  table:  images    
  id  imageName  
   1    pic01
   2    pic02
   3    pic03    

  table:  imagesKeywords
  imageId  keywordId
   1        2
   1        3
   1        4
   2        3
   3        1
   3        4
   3        2

  table:  keywords
  id  keywordName  
   1    car
   2    tree
   3    cat
   4    phone

Каждое изображение имеет несколько ключевых слов, а на разных изображениях может быть одно и то же ключевое слово.

Мне нужно выполнить поиск изображений, у них есть определенное keywordName.

пример-1: поиск автомобиля и телефона

результат должен быть: pic03

пример-2: поиск дерева и телефона

результат должен быть: pic01, pic03

Теги:

3 ответа

3
Лучший ответ

Кажется, вы хотите, чтобы JOIN с GROUP BY:

select i.imageName
from images i inner join
     imagesKeywords ik 
     on ik.imageId = i.id inner join 
     keywords k
     on k.id = ik.keywordId 
where k.keywordName in ('car', 'phone')
group by i.imageName
having count(*) = 2; 
0

Одно из возможных решений,

with subquery as
       (select i1.imageName, k1.keywordName from keywords k1 join imagekeywords ik1 on k1.id=ik1.keywordId join images i1 on i1.id = ik1.imageId )    
 select a.imageName from subquery a join subquery b on a.imageName=b.imageName where a.keywordName ='car' and b.keywordName='phone';
0

Как я понимаю вас, это должно работать:

select i.imageName as name from keywords k
join imagesKeywords iK on k.id = iK.keywordId
join images i on iK.imageId = i.id
group by i.imageName;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню