【发布时间】:2011-09-12 05:32:19
【问题描述】:
这是我的问题:我有三个代表多对多关系的表,如下所示:
餐桌用品
产品编号
product_price 等(每个产品的基本信息相同)
表格规格
规格ID
规格名称
表格产品规格
产品编号
规格ID
内容
我的目标是按规格(一种和多种)选择产品,因此我使用了以下查询:
SELECT *
FROM products p
JOIN products_specifications ps ON ps.products_id = p.products_id
JOIN specifications s ON s.spec_id = ps.spec_id
WHERE s.spec_name IN (<names of specs>)
AND pts.content IN (<content of specs>)
GROUP BY p.products_id
HAVING COUNT(DISTINCT s.specifications_name) = <count of specs name>
AND COUNT(DISTINCT ps.content) = <count of specs content>
我想获取属于所有产品的所有规格,但是此查询仅返回规格之一(用于进行查询的规格)。
specifications.content 列包含我想用来查询一个产品(或多个)的值(包含在它的所有规格中)。这些规范的名称可以在specifications.spec_name 表中找到。为了确保查询不会检索到可能在另一行中相同但来自不同规范的内容,我还对规范名称进行了 WHERE IN。
是否可以进行查询,选择某些规格,但也返回所选产品的所有规格?
我已经想到并尝试了 UNIONS 和 SUBQUERIES。但是我无法生成足够的查询。我认为子查询可能是进入的方向。返回 product_id 的第二个查询是不可能的,因为必须可以按每个产品的任何规范对查询进行排序。
【问题讨论】:
-
在您提出的查询中使用 product_specifications.content 的测试让我感到困惑。让我重新表述您的目标,并告诉我这是否是您希望查询执行的操作:从一组一个或多个 specification.spec_name 值开始。查找产品中与具有这些值的规范行相关联的所有行。对于 products 中的每一行,输出 product_specifications 中的所有行以及与其链接的规范。请告诉我这是否正确,或者如果不正确,请澄清您要做什么。
-
specifications.content 包含我想用来查询一个产品(或多个)的值(包含在它的所有规格中)。这些规范的名称可以在specifications.spec_name 表中找到。我希望这能让它更清楚一些
标签: mysql many-to-many specifications product