如何进行查询,只选择有产品的CATEGORIES?

时间:2011-06-11 15:39:07

标签: mysql sql relational-database

我的数据库结构如下:

CATEGORIES > SUBCATEGORIES > PRODUCTS

只想展示与其相关的产品类别,但我不知道我的方法是否最好。 我想把一些SELECT语句放在第一个WHERE中,但这听起来“不实用”。 我搜索了Google / MySQl文档,没有任何帮助。

我对CATEGORIES所做的事情>子类别:

SELECT c.*
FROM categories c
WHERE 
(
   SELECT count(*)
   FROM subcategories sc
   WHERE sc.id_categories = c.id
) > 2

通过这个查询,我可以成功地看到哪些类别有超过2个与它们相关的子类别,我也可以这样做,将PRODUCTS表添加到此查询中。但我几乎肯定这会减慢查询速度。有一些更快速的方法来进行这种类型的查询? 谢谢!

2 个答案:

答案 0 :(得分:2)

子选择是为此目的而设计的。

SELECT * FROM categories 
WHERE 
   (  SELECT COUNT(id) 
      FROM subcategories 
      WHERE 
        category=categories.id AND 
        (  SELECT COUNT(id) 
           FROM products 
           WHERE 
             subcategory=subcategories.id
        )
    )

请注意,此查询可能不是最佳选择。并且可能无法正常工作。

编辑:
以下可能会更快地运作:

SELECT * FROM categories 
WHERE 
   EXISTS(
      SELECT COUNT(id) 
      FROM subcategories 
      WHERE 
        category=categories.id AND 
        EXISTS(
           SELECT *
           FROM products 
           WHERE 
             subcategory=subcategories.id
        )
    )

答案 1 :(得分:2)

这样的事情,我不知道你的FK关系,所以我只是在这里猜测。

SELECT *
FROM Categories
WHERE EXISTS(
  SELECT NULL
  FROM products
  JOIN SubCategories ON products.fkSubCatID = SubCategories.PkSubCatID
  WHERE SubCategories.fkCatID = Categories.pkCatID
  HAVING Count(*) > 2)