我有两张桌子:option_combination& option_combination_mapping
option_combination
option_combination_mapping
我有一个option_value_id和product_id数组,我想要记录我的数组的product_id和所有option_value_id被映射的记录。 如果说我的数组是(11,7,9),那么对于相同的产品(11,7,10)有映射 使用此查询我得到(11,7,9)的映射,但我也得到11,7(11,7,10)的映射
SELECT * FROM
oc_option_combination_mapping
ocm LEFT JOINoc_option_combination
oc ON(ocm。option_combination_id
= oc。option_combination_id
)其中oc.product_id = 4 AND ocm。option_value_id
IN(11,7,9)
SELECT * FROM
oc_option_combination
oc LEFT JOINoc_option_combination_mapping
ocm ON(oc。option_combination_id
= ocm。option_combination_id
)其中oc.product_id = 4 AND ocm。option_value_id
IN(11,7,9)有COUNT(DISTINCT ocm。option_value_id
= 3)
SELECT * FROM
oc_option_combination
oc LEFT JOINoc_option_combination_mapping
ocm ON(oc。option_combination_id
= ocm。option_combination_id
)其中oc.product_id = 4 AND ocm。option_value_id
IN(11,7,10)有COUNT(DISTINCT ocm。option_value_id
= 3)
我再次获得相同的结果,而它应该使用option_combination_id 2获取记录而不是使用option_combination_id 1
我需要帮助来获取产品的option_value_id与查询的各种不同独特组合的价格和数量。
例如,查询的结果应该是option_valination_id(11,7,9)和product_id 4的option_combination_id 1(价格10)的记录,查询的结果应该是option_Value_id的option_combination_id 2(价格20)的记录(11,7,10)和product_id 4
答案 0 :(得分:2)
最后一个几乎是正确的,只是您将=3
移到了count()
,但它应该在它之外。此外,您错过了group by子句:
SELECT oc.option_combination_id
FROM `option_combination` oc
INNER JOIN `option_combination_mapping` ocm ON (oc.`option_combination_id` = ocm.`option_combination_id`)
where oc.product_id = 4 AND ocm.`option_value_id` IN (11,7,10)
Group by oc.option_combination_id
HAVING COUNT(DISTINCT ocm.`option_value_id`)=3
我也改变了将左连接更改为内连接,因为无论如何你都在右边的表上进行过滤。