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

Mysql 如何从不同类别中获得交叉产品,mysql,Mysql,我有一张如下图所示的桌子,它是大桌子的精简版 问题 我必须得到9030和1993类别的产品,所以在这种情况下,它应该显示1行。但当我执行下面的查询时,结果是null 从catalog_category_product中选择*,其中catalog_id='1993'和 类别识别号=9022 因此,预期的输出将是1行,产品id为33839,是否有任何方法与结果相交 我对MySQL查询不太熟悉,请告知。为了得到相交的结果: 使用不在: SELECT C1.product_id FROM cata

我有一张如下图所示的桌子,它是大桌子的精简版

问题

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

从catalog_category_product中选择*,其中catalog_id='1993'和 类别识别号=9022

因此,预期的输出将是1行,产品id为33839,是否有任何方法与结果相交


我对MySQL查询不太熟悉,请告知。

为了得到相交的结果:

使用
不在

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
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 
使用
内部联接

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;
使用
存在

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
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 

单个值不能为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)

使用或代替andcategory_id不能同时为两个值,请使用or或IN(),但它将给出这些类别中的所有产品,不相交的结果X不能同时为1和2!?!??!??!但是它可能是1或2,或者更好。
category\u id IN(1993,9022)
您的预期输出是什么?解决了我的问题,使用第二种方法。。我接受了答案。