好的,老实说,我的标题不正确,但是这就是我解释问题的方式。

这是我的示例数据:

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,但是它给了我两个输出。如何仅从“诊断”列中获取症状aa的条件的c值?
对不起,我的英语太糟糕了。

mysql - 仅当in子句中的值存在时才返回值-LMLPHP

最佳答案

您可以尝试在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         |




View on DB Fiddle

09-25 18:52