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