product_id |value
1 | a
1 | b
1 | c
2 | a
2 | c
2 | d
3 | a
3 | c
3 | d
以下是我的代码,我想要实现的是检查哪个product_id都有' a'和' c' - 这部分工作正常。
我的问题是,当我执行以下操作时:
AND value != ('b')
它完全忽略了不等于运算符并仍然返回b ...
SELECT
product_id, value
FROM
table
WHERE
value = 'a'
OR value = 'c'
AND value != ('b')
GROUP BY product_id
HAVING count(value) = 2
order by product_id
我想我的问题是如何修复它,为什么会发生这种情况?非常感谢您的宝贵时间。 :)
编辑: 我应该做的是:
product_id value
2 a
3 a
答案 0 :(得分:0)
为where
子句添加正确的括号。现在,在value='C' and value<>'b'
SELECT
product_id, value
FROM
table
WHERE
(value = 'a'
OR value = 'c')
AND value != ('b')
GROUP BY product_id
HAVING count(value) = 2
order by product_id
更新::看起来修复括号不会解决您的问题。在conditional count
子句中使用having
来过滤组。
SELECT product_id,
min(value) value
FROM table
GROUP BY product_id
HAVING Count(CASE WHEN value = 'a' THEN 1 END) = 1
AND Count(CASE WHEN value = 'c' THEN 1 END) = 1
AND Sum(CASE WHEN value <> 'b' THEN 0 ELSE 1 END) = 0
答案 1 :(得分:0)
操作顺序。
value = 'a' OR value = 'c' AND value <> ('b')
将评估与
相同value = 'a' OR (value = 'c' AND value <> ('b'))
将条件(WHERE)子句更改为
(value = 'a' OR value = 'c') AND value <> ('b')