sql多对多关系查询

qfe3c7zg  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(271)

我有很多对很多的关系

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

gcmastyq

gcmastyq1#

你似乎想要 JOINGROUP 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;
nr7wwzry

nr7wwzry2#

据我所知,这应该是可行的:

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;
vshtjzan

vshtjzan3#

一个可能的解决方案,

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';

相关问题