繁体   English   中英

返回SELECT匹配,其中两行匹配不同的列值

[英]Return a SELECT match where two rows match with different column values

我有一个包含以下各列的表格

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 AND desc_id = 6 AND cat_id = 5 AND 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;

Haven子句中的每个条件都会检查是否存在值的组合之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM