SQL查询查找没有子项的父项

时间:2011-11-29 01:03:25

标签: sql

我有一个产品表和一个类别表。这些类别具有父子层次结构,只有2个级别(父级和子级)。产品可以通过台式PC与许多类别相关联。

如何找到所有具有父类别但同一父母没有子女的产品?

2 个答案:

答案 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)

假设:

  1. 您的类别表中有一个名为“parent_category”的字段,其中包含子类别的父类别的ID,如果是父类别,则为0。
  2. 您的PC表包含productid和categoryid字段。
  3. 然后

    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