首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在基于两个表的MySQL中选择

在基于两个表的MySQL中选择
EN

Stack Overflow用户
提问于 2010-06-11 20:46:42
回答 3查看 177关注 0票数 3

我有两张桌子。

疾病

代码语言:javascript
复制
-----------------------------
| ID  |  NAME               |
-----------------------------
| 1   | Disease 1           |
| 2   | Disease 2           |
| 3   | Disease 3           |

diseases_symptoms

代码语言:javascript
复制
-----------------------------
| DISEASE_ID  | SYMPTOM_ID  |
-----------------------------
| 1           | 1           |
| 1           | 2           |
| 1           | 3           |
| 1           | 4           |
| 2           | 1           |
| 2           | 2           |

我想选择症状为1或2和3或4的所有疾病。

我试过了:

代码语言:javascript
复制
SELECT * 
 FROM diseases_symtoms 
WHERE (symptoms = '1' OR symptoms = '2') 
  AND (symptoms = '3' OR symptoms = '4')

和:

代码语言:javascript
复制
SELECT * 
  FROM diseases_symtoms 
  WHERE symptoms IN ('1','2') 
    AND symptoms IN ('3','4')

...but它不工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-11 20:51:45

请记住,SELECT一次只能检查一行。这两个查询的作用就好像您可以同时检测一个1和一个3 (例如),这是不可能的。

要一次考虑多个行,您可以联接到表的两个单独副本,或者尝试像这样的分组:

代码语言:javascript
复制
SELECT diseases.*
FROM diseases
INNER JOIN diseases_symptoms ON (disases_symptoms.disease_id = diseases.disease_id)
GROUP BY diseases.disease_id
HAVING SUM(IF(symptoms = 1 OR symptoms = 2, 1, 0) > 0 AND SUM(IF(symptoms = 3 OR symptoms = 4, 1, 0) > 0
票数 1
EN

Stack Overflow用户

发布于 2010-06-11 20:52:44

代码语言:javascript
复制
SELECT d.* FROM diseases AS d
INNER JOIN disease_symptoms AS s1 ON s1.DISEASE_ID = d.ID WHERE SYMPTOM_ID IN (1, 2)
INNER JOIN disease_symptoms AS s2 ON s2.DISEASE_ID = d.ID WHERE SYMPTOM_ID IN (3, 4)
GROUP BY d.ID
票数 0
EN

Stack Overflow用户

发布于 2010-06-11 21:02:02

你可以试试..。

代码语言:javascript
复制
SELECT DISTINCT *
    FROM diseases
    WHERE EXISTS (SELECT *
                       FROM disease_symptoms
                       WHERE disease.disease_id = disease_symptoms.disease_id AND
                             symptom_id IN (1,2)) AND
          EXISTS (SELECT *
                       FROM disease_symptoms
                       WHERE disease.disease_id = disease_symptoms.disease_id AND
                             symptom_id IN (3,4));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3022799

复制
相关文章

相似问题

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