[英]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));
I think it's wrong 我认为是错的
How to make this code is correct? 如何使此代码正确?
thank everyone :) 谢谢大家:)
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
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
In both the Select references above, either use Top 1 or use IN (Select... instead " = Select" 在上面的两个“选择”引用中,都使用“前1个”或“使用IN”(选择...而不是“ =选择”
Without knowing your specific error, or your DBMS, perhaps this translation can help: 在不知道您的特定错误或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
);
This converts your syntax to the ANSI syntax, eliminating the double-nesting of subqueries. 这会将您的语法转换为ANSI语法,从而消除了子查询的双重嵌套。 The INNER JOINs should provide the filtering you are looking for, and the aliasing of the date in the WHERE clause subquery should eliminate errors that certain DBs (such as Teradata) will throw.
INNER JOINs应该提供您要查找的筛选,并且WHERE子句子查询中日期的别名应消除某些数据库(例如Teradata)将引发的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.