2011-11-29 79 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)