我有一些定义查询的麻烦。 我有一个产品和一个类别表。产品可以属于多个类别,反之亦然,因此还有一个产品类别表。
现在我想选择属于某个类别的所有产品。但是如果用户没有提供我希望所有产品的类别。我尝试使用连接创建查询但是如果产品属于多个类别(在没有查询特定类别的情况下),则会导致产品被多次选中。
我必须创建什么类型的查询?
由于
答案 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>
这样的事情?