2011-11-29 76 views
0

我有一个产品表和一个类别表。这些类别具有仅有2个级别(父母和子女)的父子级别。产品可以通过桌面PC与许多类别相关联。SQL查询找到没有孩子的父母

如何查找所有父母类别但没有孩子的产品?

回答

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) 

如果你是一个更好的人,你会规定所有的问题。

+0

真棒,谢谢。我会在下次尝试更具体的;-) – MotoTribe

0

假设:

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

然后

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 
0
select parent.name 
from parent as p 
join holidays as h on (h.person_id = p.person_id) 
where (h.date not in (select date from school_holidays)) 

:O)