本文介绍了执行 SQL 语句时出现的“未明确定义列”错误,并提供了解决方法。

问题描述

在执行以下 SQL 语句时,出现“未明确定义列”错误:

select (select count(*)
  from rcd_inpatient_record_set t,
       vhis_inpatientinfo       f,
       rcd_inpatient_record     m,
       rcd_record_sign          d 
 where t.inpatient_id = f.ID
   and m.inpatient_record_set_id=t.id
   and m.id=d.inpatient_record_id
   and d.is_new='1' 
   and d.sign_time between
       TO_DATE('2023-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and
       TO_DATE('2023-07-31 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
       ) as num ,c.* from (
select f.INPATIENT_NO,f.name,m.name,d.*
  from rcd_inpatient_record_set t,
       vhis_inpatientinfo       f,
       rcd_inpatient_record     m,
       rcd_record_sign          d 
 where t.inpatient_id = f.ID
   and m.inpatient_record_set_id=t.id
   and m.id=d.inpatient_record_id
   and d.is_new='1' 
   and d.sign_time between
       TO_DATE('2023-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and
       TO_DATE('2023-07-31 00:00:00', 'yyyy-mm-dd hh24:mi:ss')) c;

错误原因

该错误通常发生在子查询中,因为没有为子查询的 select 语句中的列指定别名。在上面的 SQL 语句中,子查询的 select 语句中包含多个列,但在主查询中没有明确引用这些列。

解决方法

为了解决该错误,需要在子查询的 select 语句中为每个列添加一个别名,以便在主查询中引用这些列。

以下是修正后的 SQL 语句:

SELECT (SELECT COUNT(*)
        FROM rcd_inpatient_record_set t,
             vhis_inpatientinfo f,
             rcd_inpatient_record m,
             rcd_record_sign d
        WHERE t.inpatient_id = f.ID
          AND m.inpatient_record_set_id = t.id
          AND m.id = d.inpatient_record_id
          AND d.is_new = '1'
          AND d.sign_time BETWEEN TO_DATE('2023-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND TO_DATE('2023-07-31 00:00:00', 'yyyy-mm-dd hh24:mi:ss')) AS num, c.*
FROM (SELECT f.INPATIENT_NO, f.name, m.name, d.*
      FROM rcd_inpatient_record_set t,
           vhis_inpatientinfo f,
           rcd_inpatient_record m,
           rcd_record_sign d
      WHERE t.inpatient_id = f.ID
        AND m.inpatient_record_set_id = t.id
        AND m.id = d.inpatient_record_id
        AND d.is_new = '1'
        AND d.sign_time BETWEEN TO_DATE('2023-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND TO_DATE('2023-07-31 00:00:00', 'yyyy-mm-dd hh24:mi:ss')) c;

总结

在使用子查询时,要确保为子查询中的每个列添加一个别名,以便在主查询中引用这些列。这样可以避免“未明确定义列”错误,并确保 SQL 语句能够正确执行。


原文地址: http://www.cveoy.top/t/topic/pg5k 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录