I have two tables.
diseases
-----------------------------
| ID | NAME |
-----------------------------
| 1 | Disease 1 |
| 2 | Disease 2 |
| 3 | Disease 3 |
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.
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. Both those queries act as if you can detect a
1and a3simultaneously (for example), which is not possible.To consider multiple rows at once, you can either join to two separate copies of the table, or try a grouping like this: