Mysql:满足类别条件的产品

时间:2013-07-29 05:52:13

标签: php mysql join left-join outer-join

我只想要满足以下条件的产品:

哪个有((category_id = 1 OR category_id = 2) AND (category_id = 3 OR category_id = 4))

数据库结构:

产品

id  int(10)     
name    varchar(128)

类别

Id  int (10)
name    varchar(64)

category_products

product_id  int(10)
category_id int(10)

数据:

我的产品详情是:

Products:
id  name
1   P1
2   P2
3   P3
4   P4

我的类别详情如下:

Categories:
Id  name
1   C1
2   C2
3   C3
4   C4

我的类别 - 产品映射详情是:

category_products:
product_id   category_id
1            1
1            3
1            4
2            2
3            1
3            2
3            3
3            4
4            1
4            4   



Final Output should be:
    id
    1
    3
    4

3 个答案:

答案 0 :(得分:1)

SELECT DISTINCT p.id, p.name FROM products AS p
INNER JOIN category_products AS c1 ON c1.product_id=p.id
INNER JOIN category_products AS c2 ON c2.product_id=p.id
WHERE c1.category_id IN (1,2) AND c2.category_id IN (3,4)

使用

无效
WHERE c.category_id IN (1,2) AND c.category_id IN (3,4)

因为WHERE子句一次只测试一行,并且一个category_id不能在一行上有两个值。因此,自连接通过匹配多个行并通过相关名称来引用它们。

答案 1 :(得分:0)

试试这个: -

select * 
from products 
where id in (select distinct(product_id) 
             from category_products 
             where (category_id =3 0R category_id=4) 
               AND (category_id =1 OR category_id=2))

答案 2 :(得分:0)

SELECT p.product_id AS id FROM product_categories AS p
WHERE (p.category_id=1 OR p.category_id=2) AND (p.category_id=3 OR p.category_id=4) GROUP BY p.category_id

因为您不需要产品名称,所以您不需要INNER JOIN。 GROUP BY和DISTINCT都应该有效。