我有一个产品表和一个类别表。这些类别具有父子层次结构,只有2个级别(父级和子级)。产品可以通过台式PC与许多类别相关联。
如何找到所有具有父类别但同一父母没有子女的产品?
答案 0 :(得分:1)
看起来像这样:
SELECT p.prod_id, p.prod
FROM products p
JOIN pc pcp ON pcp.prod_id = p.prod_id
JOIN category cp ON cp.cat_id = pcp.cat_id
WHERE EXISTS (
SELECT *
FROM category c0
WHERE c0.parent_id = cp.cat_id
)
AND NOT EXISTS (
SELECT *
FROM pc pcc
JOIN category cc ON cc.cat_id = pcc.cat_id
AND cc.parent_id = cp.cat_id
WHERE pcc.prod_id = p.prod_id
)
GROUP BY p.prod_id, p.prod
"查找所有具有子类别(=父类别)的产品,其中此类别的儿童未链接到同一产品。"
这假设父表子关系是使用表category
中的单个列实现的:
parent_id REFERENCES category (cat_id)
如果你是一个更好的人,你会在问题中指明所有内容。
答案 1 :(得分:0)
假设:
然后
SELECT * FROM products
LEFT JOIN pc ON products.productid = pc.productid
LEFT JOIN categories ON categories.categoryid = pc.categoryid
WHERE categories.parent_category_id = 0