首页 文章

MySQL通过关系表在第3表中搜索

提问于
浏览
0

假设我有三张表如下:

  • PRODUCT表(P)有ID,NAME

  • CATEGORY表(C)具有ID,NAME

  • RELATION表(R)具有ID,PRODUCT_ID,CATEGORY_ID

我目前在产品列表页面上,我想要一个能够按类别名称搜索产品的功能 .

select P.* 
from P
where P.id in (select group_concat(distinct R.product_id) from C join R on C.id=R.category_id where C.name like '%something%')

上面的SQL只会给我第一个匹配,但在括号中运行查询将返回多个id . 我该如何纠正?

1 回答

  • 0

    group_concat() 是不必要的:

    select P.* 
    from P
    where P.id in (select R.product_id
                   from C join
                        R
                        on C.id = R.category_id
                   where C.name like '%something%'
                  );
    

    您的查询很好,但通常会写为:

    select P.*
    from P join
         R
         on P.id = R.product_id join
         C
         on C.id = R.category_id
    where C.name like '%something%';
    

    如果多个类别与 like 条件匹配,则此版本可能会返回重复项 .

相关问题