首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从mysql表返回满足列多个条件的行

从mysql表返回满足列多个条件的行
EN

Stack Overflow用户
提问于 2016-04-12 12:00:44
回答 3查看 176关注 0票数 4

我有mysql表与医院和治疗(与子治疗相关),他们提供。我需要对表进行mysql查询,返回列表中提供所有治疗/子治疗的医院。例如:

从下表我需要医院提供所有的治疗清单:(tretament_id,sub_treatment_id) = (1-1,1-2)。因此,结果必须是有id 1和8的医院。

代码语言:javascript
复制
    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,但它的工作方式是和?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-12 12:05:38

试试这个:

代码语言:javascript
复制
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

Demo here

票数 2
EN

Stack Overflow用户

发布于 2016-04-12 12:04:57

您可以使用group byhaving来完成这一任务。

代码语言:javascript
复制
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)可以很容易地修复这个问题,但可能没有必要。

票数 1
EN

Stack Overflow用户

发布于 2016-04-12 12:10:04

下面是一个使用GROUP_CONCATJOIN的解决方案

代码语言:javascript
复制
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';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36572666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档