我有两个表: 表_ 模型,其中包含字段 name 和 model_id 和 表_ 标签,其中包含字段 tag_name , tags_id 和 model_id
在我的网络应用中,可以通过在与模型的 model_id 相关字段的表 _tags 中添加记录来为模型分配一些标签。
如何从表 _models 中选择仅在 _tags 表中分配了相同 tags 的模型?
例如,我需要选择所有已分配标签#jacket和标签#trench的模型
答案 0 :(得分:0)
例如,您可以将GROUP BY / HAVING和COUNT DISTINCT一起使用,以查找同时具有 和分配标签的模型。
SELECT m.model_id, m.name
FROM models m
INNER JOIN tags t
ON m.model_id = t.model_id
WHERE t.tag_name IN ('#jacket', '#trench')
GROUP BY m.model_id, m.name
HAVING COUNT(DISTINCT t.tag_name) = 2;
答案 1 :(得分:0)
执行相同操作的方式略有不同:
SELECT
m.model_id
, m.name
FROM
_models m
WHERE
2 = (
SELECT
COUNT(*)
FROM
_tags t
WHERE
m.model_id = t.model_id
AND t.tag_name IN ('#jacket', '#trench')
)
注1:最好将标记名称移到单独的表中。因此有3个表格:模型(id,名称),标签(id,名称),tags2models(标签ID,模型ID)
注意2:不要忘记在表_tags上添加索引(tag_name,model_id)