簡體   English   中英

基於兩個表在MySQL中選擇

[英]Select in MySQL based on two tables

我有兩張桌子。

疾病

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

我想選擇症狀為1或2和3或4的所有疾病。

我試過了:

SELECT * 
 FROM diseases_symtoms 
WHERE (symptoms = '1' OR symptoms = '2') 
  AND (symptoms = '3' OR symptoms = '4')

和:

SELECT * 
  FROM diseases_symtoms 
  WHERE symptoms IN ('1','2') 
    AND symptoms IN ('3','4')

......但它不起作用。

請記住,SELECT一次只能檢查一行。 這兩個查詢的行為就好像你可以同時檢測到13 (例如),這是不可能的。

要一次考慮多個行,您可以加入表的兩個單獨副本,或嘗試這樣的分組:

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

你可以試試......

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM