2011-04-01 27 views
2

我敢肯定这很简单,但我的大脑今天不工作!MySQL加入转发问题

我有一个表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

同一行中的相同字段不能有两个值 – 2011-04-01 11:25:54

回答

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) 
+0

这看起来可行,只是对我的数据集进行测试 – robjmills 2011-04-01 11:41:46

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

名称表,并指定哪个字段来自哪个表。然而,一个字段如何可以连续成为1和3?在where子句中有一个逻辑问题。

+0

我欣赏逻辑问题,但我的代码基本上是伪代码来解释问题 – robjmills 2011-04-01 11:34:34