根据表

时间:2017-07-22 11:46:47

标签: mysql sql

我有两张桌子:option_combination& option_combination_mapping

option_combination

  • option_combination_id
  • 产品ID
  • 数量

enter image description here

option_combination_mapping

  • ID
  • option_combination_id
  • option_id
  • option_value_id

enter image description here

我有一个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 JOIN   oc_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)

enter image description here 我尝试了这个查询,它给出了所需的结果,但只有一个组合

  

SELECT * FROM oc_option_combination oc LEFT JOIN   oc_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)

enter image description here 当我尝试另一种组合时11,7,10:

  

SELECT * FROM oc_option_combination oc LEFT JOIN   oc_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)

enter image description here 我再次获得相同的结果,而它应该使用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

1 个答案:

答案 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

我也改变了将左连接更改为内连接,因为无论如何你都在右边的表上进行过滤。