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
的用途。如果没有任何聚合,使用分组依据
的目的是什么???了解分组依据
的用途。如果没有任何聚合,那么使用分组依据
的目的是什么???