如何执行以下分面搜索语句:
SELECT * FROM animals WHERE animal is assigned to tag ('brown' or 'black') AND tag ('male')
给出以下表格结构:
id |名称
animalsId | tagsId
id |标签
tagsId | tagsGroupId
id | tagGroup
这是我的尝试:
SELECT * FROM animals
INNER JOIN animalTags ON animalTags.animalsId = animals.id
INNER JOIN tags ON animalTags.tagsId = tags.id
INNER JOIN tagGroups ON tagGroups.tagsId = tags.id
INNER JOIN tagGroup ON tagGroups.tagGroupsId = tagGroup.id
然后使用GROUP BY和HAVING我会假设说:
GROUP BY tagGroup
???
需要这个是灵活的,最终这成为一个存储过程,我只是传递像51,69,88
这样的标记ID,而存储过程确实发挥了它的魔力。
答案 0 :(得分:0)
如果你想让所有动物都被标记为'brown','black','male'
,那么这样的事情会做(例子)。在join
到AnimalTags
表之前,您需要join
到映射表Tags
。考虑到每只动物将与一个或多个标签相关联,我已经选择做INNER JOIN
。如果情况并非如此,您可以考虑改为LEFT JOIN
。
SELECT a.* FROM animals a
join AnimalTags at on a.id = at.animalsid
join Tags t on t.id = at.tagsid
where t.tag in ('brown','black','male')