我的数据库结构如下:
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表添加到此查询中。但我几乎肯定这会减慢查询速度。有一些更快速的方法来进行这种类型的查询? 谢谢!
答案 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)