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

Mysql 仅当'in'子句中的值存在时才返回值,mysql,sql,Mysql,Sql,好吧,我真的认为我的标题是不正确的,但这就是我如何解释我的问题 以下是我的示例数据: id diagnosis symptom 1 a c 2 a a 3 a b 6 b a 7 b c SELECT diagnosis FROM vdoc_b_symptom WHERE symptom IN ('a','c') GROUP BY diagnosis HAVING COUNT(*) = 2;

好吧,我真的认为我的标题是不正确的,但这就是我如何解释我的问题

以下是我的示例数据:

id diagnosis symptom
 1 a          c
 2 a          a
 3 a          b
 6 b          a
 7 b          c
SELECT diagnosis 
FROM vdoc_b_symptom
WHERE symptom IN ('a','c')
GROUP BY diagnosis 
HAVING COUNT(*) = 2;

我的问题是,如何仅在in子句中的
条件下检索诊断

这是我的疑问:

id diagnosis symptom
 1 a          c
 2 a          a
 3 a          b
 6 b          a
 7 b          c
SELECT diagnosis 
FROM vdoc_b_symptom
WHERE symptom IN ('a','c')
GROUP BY diagnosis 
HAVING COUNT(*) = 2;

我想要得到的输出只有
b
,但是它给了我两个输出。如何仅从带有症状
a
c
条件的“诊断”列中获取
a
值? 我很抱歉我的英语太差了


您可以尝试在
HAVING

架构(MySQL v5.6)


查询#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         |


您可以尝试在
HAVING

架构(MySQL v5.6)


查询#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         |

尝试下面的查询

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')
)
尝试下面的查询

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')
)

也许是更聪明的方法,但我的理解是,你需要结果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' )) 

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

可能是更聪明的方法,但按照我的理解,您需要结果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' )) 

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

了解
groupby
的用途。如果没有任何聚合,使用
分组依据
的目的是什么???了解
分组依据
的用途。如果没有任何聚合,那么使用
分组依据
的目的是什么???