MySql JOIN表由一对多关系产生

时间:2013-10-08 17:08:29

标签: php mysql sql

我有一个电子商务网站(MySql / PHP),我需要在两个连接的表中获得一些结果。这是我所拥有的简化版本:

Table: product[
product_id,
other_irrelevant_stuff,
etc.
]

Table: product_to_category[
product_id,
category_id
]

产品可能有多个类别。我正在使用product p LEFT JOIN product_to_category p2c ON (p2c.product_id = p.product_id)。我需要为分配了两个特定类别的产品获取结果。

显然,如果我使用p2c.category_id = 1 AND p2c.category_id = 2我没有结果,因为没有一个符合这些条件的订单项。如果我使用p2c.category_id = 1 OR p2c.category_id = 2,我会从两个类别(所有category_id = 1和所有category_id = 2)获得我不想要的所有结果。我只想获得具有category_id 1category_id 2的商品。

我通常很擅长这个,但也许我只是有一个大脑放屁。那里有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这可以使用group bycountdistinct

一起使用
select p.product_id
from product p
    join product_to_category pc on p.product_id = pc.product_id
where pc.category_id in (1,2)
group by p.product_id
having count(distinct pc.category_id) = 2

答案 1 :(得分:0)

请执行以下操作...

select distinct tab1.product_id

from product tab1

join product_to_category tab2 on tab1.product_id = tab2.product_id

where tab2.category_id in (1,2)

group by tab1.product_id;

试试这个,你的问题就会解决。