[英]SQL subquery expression
SELECT
list_diagnosis_seq, list_diagnosis_icd10,
list_diagnosis_disease, list_diagnosis_diagtype
FROM
cmu_list_diagnosis, cmu_treatment
WHERE
(cmu_list_diagnosis.list_diagnosis_date = (SELECT MAX(list_diagnosis_date)
FROM cmu_list_diagnosis))
AND cmu_list_diagnosis.treatment_id = (SELECT cmu_list_diagnosis.treatment_id
FROM cmu_list_diagnosis, cmu_treatment
WHERE cmu_treatment.treatment_date = current_date
AND cmu_treatment.patient_id = (SELECT cmu_patient.patient_id
FROM cmu_patient, cmu_treatment
WHERE cmu_patient.patient_id = cmu_treatment.patient_id));
我认为是错的
如何使此代码正确?
谢谢大家:)
AND cmu_list_diagnosis.treatment_id =(从cmu_list_diagnosis,cmu_treatment中选择cmu_list_diagnosis.treatment_id WHERE cmu_treatment.treatment_date =当前日期AND cmu_treatment.patient_id =(选择cmu_ Patient。Patient_id
在上面的两个“选择”引用中,都使用“前1个”或“使用IN”(选择...而不是“ =选择”
在不知道您的特定错误或DBMS的情况下,此翻译可能会帮助您:
SELECT ListDiagnosis.list_diagnosis_seq
,ListDiagnosis.list_diagnosis_icd10
,ListDiagnosis.list_diagnosis_disease
,ListDiagnosis.list_diagnosis_diagtype
FROM cmu_list_diagnosis AS ListDiagnosis
INNER JOIN cmu_treatment AS Treatment ON Treatment.treatment_id = ListDiagnosis.treatment_id
AND Treatment.treatment_date = CURRENT_DATE
INNER JOIN cmu_patient AS Patient ON Patient.patient_id = Treatment.patient_id
WHERE ListDiagnosis.list_diagnosis_date = (
SELECT MAX(list_diagnosis_date) AS MaxDate
FROM cmu_list_diagnosis
);
这会将您的语法转换为ANSI语法,从而消除了子查询的双重嵌套。 INNER JOINs应该提供您要查找的筛选,并且WHERE子句子查询中日期的别名应消除某些数据库(例如Teradata)将引发的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.