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

时间:2018-03-12 02:06:14

标签: mysql sql join relation

我们说我有三张桌子如下:

  • PRODUCT表(P)有ID,NAME

  • CATEGORY表(C)有ID,NAME

  • RELATION table(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 :(得分: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条件,则此版本可能会返回重复项。