SQL 错误:未明确定义列 - 解决方法
本文介绍了执行 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 著作权归作者所有。请勿转载和采集!