我有他们提供的医院和治疗(与子治疗相关)的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
我尝试了WHERE IN但它的工作方式与OR一样,因此返回医院4,只满足(1,1)。我怎样才能编写像WHERE IN这样的SQL查询但是它的工作方式与AND一样?
答案 0 :(得分:2)
试试这个:
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) = 2
答案 1 :(得分:1)
您可以使用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)
进行修复,但可能没有必要。
答案 2 :(得分:1)
以下是使用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';