MySQL选择与另一个表中其他记录相同的所有记录

时间:2018-11-21 21:29:56

标签: mysql join

我有两个表: 表_ 模型,其中包含字段 name model_id  和 表_ 标签,其中包含字段 tag_name tags_id model_id

在我的网络应用中,可以通过在与模型的 model_id 相关字段的表 _tags 中添加记录来为模型分配一些标签。

如何从表 _models 中选择仅在 _tags 表中分配了相同 tags 的模型?

例如,我需要选择所有已分配标签#jacket和标签#trench的模型

2 个答案:

答案 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)