我有mysql表与医院和治疗(与子治疗相关),他们提供。我需要对表进行mysql查询,返回列表中提供所有治疗/子治疗的医院。例如:
从下表我需要医院提供所有的治疗清单:(tretament_id,sub_treatment_id) = (1-1,1-2)。因此,结果必须是有id 1和8的医院。
hospital_id | treatment_id | sub_treatment_id
-------------------------------------------------
1 | 1 | 1
1 | 1 | 2
1 | 1 | 3
_________________________________________________
4 | 1 | 1
4 | 2 | 1
_________________________________________________
8 | 1 | 1
8 | 1 | 2
_________________________________________________
7 | 2 | 1我尝试过IN,但它的工作原理类似于OR,所以返回医院4,它只满足(1,1)。我如何编写一个sql查询,如WHERE IN,但它的工作方式是和?
发布于 2016-04-12 12:05:38
试试这个:
SELECT hospital_id
FROM mytable
WHERE (treatment_id, sub_treatment_id) IN ((1, 1), (1, 2))
GROUP BY hospital_id
HAVING COUNT(CASE
WHEN (treatment_id, sub_treatment_id) IN ((1, 1), (1, 2))
THEN 1
END) = 2Demo here
发布于 2016-04-12 12:04:57
您可以使用group by和having来完成这一任务。
select hospital_id
from t
where treatment_id = 1 and sub_treatment_id in (1, 2)
group by hospital_id
having count(*) = 2;注意:这假设表中没有重复项。使用count(distinct)可以很容易地修复这个问题,但可能没有必要。
发布于 2016-04-12 12:10:04
下面是一个使用GROUP_CONCAT和JOIN的解决方案
select distinct t.hospital_id
from hospitals h and treatments t ON h.id = t.hospital_id
having GROUP_CONCAT(CONCAT(t.treatment_id, '-', t.sub_treatment_id)
ORDER BY t.treatment_id, t.sub_treatment_id)
= '1-1,1-2';https://stackoverflow.com/questions/36572666
复制相似问题