我有一张桌子,如下图所示,它是一张较大的桌子的剥离版本。
问题
我必须在9030和1993类别中获得产品,所以在这种情况下它应该显示1行。但是当我执行下面的查询时,它会给出null作为结果。
SELECT * FROM catalog_category_product WHERE category_id ='1993'AND CATEGORY_ID = 9022
所以预期的输出是product_id 33839的1行,有没有办法让结果相交。
我不太熟悉MySQL查询,请指教。
答案 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)