我有一个包含以下列的表格
- 产品类型
- 品牌 ID
我需要brand_ids A和B,但不是C
在该表中,可以有多个具有相同product_type 但具有不同brand_id 的记录。
可能是需要 INNER SELF JOIN 吗?或者有更好的方法吗?
SELECT A.product_type
FROM product_table A
JOIN product_table B ON A.product_type = B.product_type
LEFT JOIN product_table C ON A.product_type = C.product_type
AND c.brand_id = 'C'
WHERE A.brand_id = 'A'
AND B.brand_id = 'B'
AND c.brand_id IS NULL
我将假设这(PRODUCT_TYPE, BRAND_ID)
是您表的唯一键。
这是一种方法来做我认为你所追求的:
SELECT product_type FROM product_table
WHERE brand_id IN ('A','B')
GROUP BY product_type
HAVING COUNT(*) = 2
MINUS
SELECT product_type FROM product_table
WHERE brand_id IN ('C')
你可以试试这个解决方案:
SELECT a.product_type
FROM
(
SELECT product_type
FROM tbl
WHERE brand_id IN ('A', 'B')
GROUP BY product_type
) a
LEFT JOIN tbl b ON a.product_type = b.product_type AND b.brand_id = 'C'
WHERE b.brand_id IS NULL