简体   繁体   English

SQL子查询表达式

[英]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.

相关问题 SQL子查询缺少表达式 - SQL missing expression on subquery SQL 子查询作为表达式 - SQL Subquery as expression SQL错误:当子查询遵循=,!=,&lt;,&lt;=,&gt;,&gt; =或将子查询用作表达式时,不允许这样做 - SQL ERROR: This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression SQL错误-子查询后跟=,!=,&lt;,&lt;=,&gt;,&gt; =或将子查询用作表达式时,不允许这样做 - Error in SQL - This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression 如何避免将多个子查询作为表达式(SQL优化) - How to avoid multiple subquery as expression (SQL optimization) 将SQL CTE表达式转换为普通子查询 - Convert SQL CTE expression to normal subquery Oracle 中使用子查询和文字表达式的 SQL 性能 - SQl performance with subquery and literal expression in Oracle SQL Server-替代包含聚合或子查询的表达式的函数的替代方法 - SQL Server - Alternatives to aggregate functions for an expression containing an aggregate or subquery 子查询时只能指定表达式…SQL Server - Only expression can be specified when subquery… SQL server SQL Server无法对包含聚合或子查询的表达式执行聚合函数 - SQL Server Cannot perform an aggregate function on an expression containing an aggregate or a subquery
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM