所以我在SQL中有两个表,Patients和Patients_Treatments,它们与patient.id作为主键连接。我想做的是让一个特定的患者看看他做了什么治疗,所以我有这个代码:
SELECT (Treatment_code)
FROM Patients_Treatments
Where Patient_ID = '999999999'现在我想要做的是从患者标签中提取所有与患者'99999999‘具有相同治疗代码(或更多治疗)的患者。
因此,如果患者'9999999‘接受了111,222,333次治疗,我有一个患者接受了111,222,555次治疗-它不会显示他,但如果他接受了111,222,333或111,222,333,444次治疗-它将显示他
我在如何做循环方面有问题,所以我确保它检查患者99999999已经做过的所有治疗,以及im检查的人也做过的。
谢谢!
发布于 2017-12-09 03:53:16
假设这是您提供的元数据和示例。
CREATE TABLE PATIENTS
(PATIENT_ID INTEGER);
CREATE TABLE PATIENTS_TREATMENTS
(PATIENT_ID INTEGER, TREATMENT_CODE INTEGER);
INSERT INTO PATIENTS VALUE (999999999),(1),(2),(3);
INSERT INTO PATIENTS_TREATMENTS VALUE
(999999999, 111),(999999999, 222),(999999999, 333),
(1, 111),(1, 222),(1, 555),
(2, 111),(2, 222),(2, 333),
(3, 111),(3, 222),(3, 333),(3,444);解决方案如下所示
SELECT
PATIENTS.PATIENT_ID
FROM PATIENTS
INNER JOIN PATIENTS_TREATMENTS MYTREATMENT
ON PATIENTS.PATIENT_ID = MYTREATMENT.PATIENT_ID
LEFT JOIN PATIENTS_TREATMENTS COMPARETREATMENT
ON COMPARETREATMENT.TREATMENT_CODE = MYTREATMENT.TREATMENT_CODE
AND COMPARETREATMENT.PATIENT_ID = '999999999'
WHERE PATIENTS.PATIENT_ID <> '999999999'
GROUP BY PATIENTS.PATIENT_ID
HAVING COUNT(COMPARETREATMENT.TREATMENT_CODE) = (SELECT COUNT(*) FROM PATIENTS_TREATMENTS WHERE PATIENT_ID = '999999999') 在http://sqlfiddle.com/上试用一下
发布于 2017-12-09 01:39:24
试试这个
SELECT P.*
FROM Patients P JOIN
Patients_Treatments PT
ON (P.Patient_ID = PT.Patient_ID)
WHERE PT.Treatment_code IN ( SELECT Treatment_code
FROM Patients_Treatments
WHERE Patient_ID = '999999999');https://stackoverflow.com/questions/47719462
复制相似问题