我想获得具有相同值的相同选项的示例数量
这是表格
table:ExampleOption
--------------
| id | nom |
--------------
| 1 | size |
--------------
| 2 | color |
--------------
表:值
------------------------------------------
| Example_id | ExampleOption_id | value |
------------------------------------------
| 1 | 1 | XL |
------------------------------------------
| 1 | 2 | black |
------------------------------------------
| 2 | 1 | L |
------------------------------------------
| 2 | 2 | red |
------------------------------------------
| 3 | 1 | XL |
------------------------------------------
| 3 | 2 | red |
------------------------------------------
表:示例
---------------------------------
| id | product_id |
---------------------------------
| 1 | 1 |
---------------------------------
| 2 | 1 |
---------------------------------
| 3 | 2 |
---------------------------------
我试过这个
SELECT COUNT(DISTINCT Example_id) FROM Value WHERE
Example_id IN(SELECT id FROM Example WHERE product_id=1)
AND ( ExampleOption_id = 1 AND value = 'XL' OR ExampleOption_id = 2 AND value='red')
此查询应该返回2,但它返回3,这与预期的错误
答案 0 :(得分:0)
如果我了解您的问题,我相信您的OR
条件中的WHERE
声明会导致错误的结果。尝试添加一些括号:
SELECT COUNT(DISTINCT exemplaire_id)
FROM valeur
WHERE exemplaire_id IN (
SELECT id
FROM produit
WHERE produit_id=?)
AND ((option_produit_id = 1 AND valeur = 'XL')
OR (option_produit_id = 2 AND valeur='red'))
答案 1 :(得分:0)
我想,你正在寻找类似这样的东西(未经测试的代码!)
SELECT
COUNT(DISTINCT Example_id)
FROM
Value V
WHERE
EXISTS (SELECT 1 FROM Example E WHERE V.Example_id = E.id AND E.product_id = 1)
AND (
(V.ExampleOption_id = 1 AND V.value = 'XL')
OR (V.ExampleOption_id = 2 AND V.value = 'red')
)
GROUP BY
V.Example_id
HAVING
COUNT(1) = 2
对结果进行分组,然后过滤到包含所有两条记录的所有组。
(DISTINCT
可能是不必要的)