仅当'in'子句中的值存在时才返回值

ndh0cuux  于 2021-06-19  发布在  Mysql
关注(0)|答案(3)|浏览(300)

好吧,我真的认为我的标题是不正确的,但这就是我如何解释我的问题。
以下是我的示例数据:

id diagnosis symptom
 1 a          c
 2 a          a
 3 a          b
 6 b          a
 7 b          c

我的问题是,我如何才能检索到诊断只有条件内的 in 条款?
我的问题是:

SELECT diagnosis 
FROM vdoc_b_symptom
WHERE symptom IN ('a','c')
GROUP BY diagnosis 
HAVING COUNT(*) = 2;

我想要得到的输出只是 b ,但是它给了我两个输出。我怎样才能拿到票 a 值仅来自“诊断”列和症状条件 a 以及 c ? 对不起,我的英语太差了。

5gfr0r5j

5gfr0r5j1#

请尝试下面的查询。

SELECT DISTINCT diagnosis
FROM vdoc_b_symptom v
WHERE NOT EXISTS (
    SELECT 1
    FROM vdoc_b_symptom
    WHERE diagnosis = v.diagnosis AND symptom NOT IN ('a', 'c')
)
6jygbczu

6jygbczu2#

可能是更聪明的方法,但按照我的理解,你需要的结果是1)同时出现症状“a”和“c”,以及2)没有任何其他症状。所以做一个:

SELECT * 
FROM   vdoc_b_symptom 
WHERE  diagnosis IN (SELECT diagnosis 
                     FROM   vdoc_b_symptom 
                     WHERE  symptom IN ( 'a', 'c' ) 
                     GROUP  BY diagnosis 
                     HAVING Count(*) = 2) 
       AND diagnosis NOT IN (SELECT diagnosis 
                             FROM   vdoc_b_symptom 
                             WHERE  symptom NOT IN ( 'a', 'c' ))

我们应该做到这一点。但是,可能需要命名一些表并限定列。

pwuypxnk

pwuypxnk3#

你可以试着使用条件 HAVING 架构(mysql v5.6)

CREATE TABLE vdoc_b_symptom(
  diagnosis varchar(5),
  symptom varchar(5)
);

insert into vdoc_b_symptom values ('a','a');
insert into vdoc_b_symptom values ('a','b');
insert into vdoc_b_symptom values ('a','c');
insert into vdoc_b_symptom values ('b','a');
insert into vdoc_b_symptom values ('b','c');

查询#1

SELECT 
        diagnosis
    FROM 
        vdoc_b_symptom
    GROUP BY 
          diagnosis
    HAVING 
        COUNT(distinct symptom) = 2 
    AND 
        SUM(symptom = 'a') > 0 
    AND 
        SUM(symptom = 'c') > 0;

| diagnosis |
| --------- |
| b         |

db fiddle视图

相关问题