MySQL加入枢轴问题

时间:2011-04-01 11:24:03

标签: mysql sql

我确信这很简单,但我的大脑今天还没有工作!

我有一个表products,我们假设它包含p_id,我有另一个表 - 一个数据透视表 - 引用products和另一个表attributes,此表格为products_to_attributes,其中包含pta_aid(属性ID)和pta_pid(产品ID)

希望这个(不正确的)查询会显示我想要做的比我能解释的更好:

SELECT `p_id` FROM `products` 
LEFT JOIN `products_to_attributes` ON (`pta_pid` = `p_id`)
WHERE ((`pta_aid` = '1' OR `pta_aid` = '2') AND(`pta_aid` = '3'))

我希望能够将产品必须具有属性1或属性2并且具有属性3的属性组合在一起。

2 个答案:

答案 0 :(得分:2)

如果我理解你的需要,你几乎必须有两个EXISTS条款:

SELECT p_id FROM products PR
WHERE EXISTS (SELECT p_id FROM products_to_attributes WHERE (pta_aid = 1 OR pta_aid=2) AND pta_pid=PR.p_id )
AND EXISTS (SELECT p_id FROM products_to_attributes WHERE pta_aid = 3 AND pta_pid=PR.p_id)

答案 1 :(得分:0)

SELECT p.`p_id` FROM `products` p
LEFT JOIN `products_to_attributes` pta ON (p.`p_id` = pta.`pta_pid`)

为表命名并指定哪个字段来自哪个表。但是一个字段如何连续1和3?你的where子句中存在逻辑问题。