在联接表

时间:2017-07-16 19:22:53

标签: mysql

有两个主要表格:

产品

  • ID
  • 名称

过滤器

  • ID
  • 名称

和一个连接表

product_filter

  • PRODUCT_ID
  • 过滤器_id

假设我们有几个产品和几个过滤器。我们有一个id为1的特殊产品,它与两个过滤器相连。这些过滤器的名称是黑色和白色,带有ID 1和2.因此,连接中我们有两个字段:(product_id:1,filter_id:2),(product_id:1,filter_id:2)。我想选择那个产品。

我尝试过的。首先,我尝试使用where or子句:select * from products join product_filter on product_filter.product_id = products.id join filters on filters.id = product_filter.filter_id where filters.name = "black" or filters.name = "white"。但这种选择产品只有黑色或仅白色滤光片。使用and子句而不是or根本不会选择任何内容。

1 个答案:

答案 0 :(得分:2)

在这种情况下你可以加入filters表两次,如

select * from products 
join product_filter on product_filter.product_id = products.id 
join filters on filters.id = product_filter.filter_id 
join filters fl on fl.id = product_filter.filter_id 
where filters.name = 'black' 
and fl.name = 'white';