[英]Select in MySQL based on two tables
I have two tables. 我有两张桌子。
diseases 疾病
-----------------------------
| ID | NAME |
-----------------------------
| 1 | Disease 1 |
| 2 | Disease 2 |
| 3 | Disease 3 |
diseases_symptoms diseases_symptoms
-----------------------------
| DISEASE_ID | SYMPTOM_ID |
-----------------------------
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 2 | 1 |
| 2 | 2 |
I want to select all diseses which have symptoms 1 or 2 and 3 or 4. 我想选择症状为1或2和3或4的所有疾病。
I've tried: 我试过了:
SELECT *
FROM diseases_symtoms
WHERE (symptoms = '1' OR symptoms = '2')
AND (symptoms = '3' OR symptoms = '4')
And: 和:
SELECT *
FROM diseases_symtoms
WHERE symptoms IN ('1','2')
AND symptoms IN ('3','4')
...but it is not working. ......但它不起作用。
Keep in mind that SELECT can only examine one row at a time. 请记住,SELECT一次只能检查一行。 Both those queries act as if you can detect a
1
and a 3
simultaneously (for example), which is not possible. 这两个查询的行为就好像你可以同时检测到
1
和3
(例如),这是不可能的。
To consider multiple rows at once, you can either join to two separate copies of the table, or try a grouping like this: 要一次考虑多个行,您可以加入表的两个单独副本,或尝试这样的分组:
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
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
You could try... 你可以试试......
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));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.