我有一个包含以下列的表格
drug_id | image_filename | cat_id | desc_id | drug_name
--------|----------------|--------|---------|--------
3 picx.jpg 3 6 bla1
3 picy.jpg 3 6 bla2 <
3 picy.jpg 5 3 bla2 < match!
3 picz.jpg 3 6 bla2
5 pixx.jpg 5 3 bla3
我需要一个查询,该查询返回所有唯一drug_name,其中drug_id相同,image_filename匹配,AND cat_id=3 和 desc_id=6 和 cat_id=5 和 desc_id=3。
换句话说,我需要一些带有count(*)=2
的 GROUP BY 逻辑,但由于我需要某些列条件对匹配不同,因此无论我尝试什么都不起作用。
现在,我返回所有排序的行并使用 seq 逻辑和计数器来检查条件和所有这些废话,我真的希望找到一个可以在 SQL 中完成这一切的查询。
一种简单的方法是将聚合与 having
子句一起使用:
select drug_name, drug_id, image_filename
from t
group by drug_name, drug_id, image_filename
having sum(cat_id = 3 and desc_id = 6) > 0 and
sum(cat_id = 5 and desc_id = 5) > 0;
具有子句中的每个条件检查是否存在值组合之一。