如何从不同类别获得交叉产品

时间:2016-08-02 10:31:29

标签: mysql

我有一张桌子,如下图所示,它是一张较大的桌子的剥离版本。

enter image description here

问题

我必须在9030和1993类别中获得产品,所以在这种情况下它应该显示1行。但是当我执行下面的查询时,它会给出null作为结果。

  

SELECT * FROM catalog_category_product WHERE category_id ='1993'AND   CATEGORY_ID = 9022

所以预期的输出是product_id 33839的1行,有没有办法让结果相交。

我不太熟悉MySQL查询,请指教。

2 个答案:

答案 0 :(得分:2)

为了获得相交结果:

使用NOT IN

SELECT 
 C1.product_id
FROM catalog_category C1
WHERE C1.product_id IN 
(SELECT 
   C2.product_id 
 FROM catalog_category C2
 WHERE C2.category_id = 9030 
)
AND C1.category_id = 1993

使用INNER JOIN

SELECT 
    C1.product_id
FROM
    catalog_category C1
INNER JOIN catalog_category C2 ON C1.product_id = C2.product_id
WHERE   C1.category_id = 9030 
AND C2.category_id = 1993;

使用EXISTS

SELECT 
 C1.product_id
FROM catalog_category C1
WHERE EXISTS (
  SELECT 1 
  FROM catalog_category C2 
  WHERE C2.category_id = 1993
  AND C1.product_id = C2.product_id
)
AND C1.category_id = 9030 

答案 1 :(得分:1)

单个值不能是1993和9022它只能是其中之一

所以你可以使用

SELECT * FROM catalog_category_product 
WHERE category_id=1993 OR category_id=9022

或者更好

SELECT * FROM catalog_category_product 
WHERE category_id IN (1993, 9022)