我确信这很简单,但我的大脑今天还没有工作!
我有一个表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的属性组合在一起。
答案 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子句中存在逻辑问题。