如何在n-m表上定义查询

时间:2011-01-01 18:10:55

标签: sql

我有一些定义查询的麻烦。 我有一个产品和一个类别表。产品可以属于多个类别,反之亦然,因此还有一个产品类别表。

现在我想选择属于某个类别的所有产品。但是如果用户没有提供我希望所有产品的类别。我尝试使用连接创建查询但是如果产品属于多个类别(在没有查询特定类别的情况下),则会导致产品被多次选中。

我必须创建什么类型的查询?

由于

2 个答案:

答案 0 :(得分:2)

使用:

SELECT p.*
FROM Products p
INNER JOIN ProductCategory pc ON p.id = pc.product_id
WHERE pc.category_id = 42
当然,

替换正确的表名和列名以及相应的类别ID。这将导致每个产品中只有一个,因为您只能从一个类别获得产品,如您所述。请注意,查询中不需要“类别”表。

编辑:

正如@Martin所说的那样,如果没有指定类别,请将业务逻辑更改为从数据库中获取所有产品(即SELECT * FROM Products)。

答案 1 :(得分:0)

SELECT p.*
FROM   p
,      pc
WHERE  p.id = pc.productid
AND    pc.categoryid = <targetcategory>

这样的事情?