注册
执行查询语句报错 -4083引用列未找到 问题处理记录
专栏/技术分享/ 文章详情 /

执行查询语句报错 -4083引用列未找到 问题处理记录

### 2026/04/24 26 0 0
摘要

报错数据库版本如下:
image.png
报错sql语句如下:

 select count(1) from ( select aaa.*
    from ( SELECT 
                    supplySignOne.supplSign   AS supplySign,
                    supplySignOne.supply_sign AS remarks,
                    dc.supplier_jc            as "supplierJcs"
               FROM drug_stock    a
         INNER JOIN drug_info     b
                 ON a.info_id = b.id
                AND ( b.org_id = a.org_id
                            OR b.org_id = (SELECT parent_id FROM sys_company WHERE org_code = a.org_id))

          LEFT JOIN drug_supplier_cata dc
                 ON a.supplier_id = dc.id
          LEFT JOIN ( SELECT zz.drug_info,
                             zz.pack_size,
                             SUM(zz.supply_sign) as supply_sign,
                             LISTAGG(
                             CASE
                                      WHEN zz.pack_size = '1'
                                      THEN '小包装'
                                      ELSE '大包装'
                             END ||
                             CASE
                                      WHEN zz.supply_sign = '1'
                                      THEN '停止供应'
                                      ELSE '正常'
                             END, ';' ) AS supplSign
                        FROM drug_price    zz
                       WHERE (zz.org_id = 'H13018100523'
                                   OR zz.org_id = (SELECT parent_id
                                         FROM sys_company
                                        WHERE org_code = 'H13018100523'))
                    GROUP BY zz.drug_info,
                             zz.pack_size ) supplySignOne
                 ON supplySignOne.drug_info = a.info_id
                AND supplySignOne.pack_size = a.pack_size
          LEFT JOIN ( SELECT xx.drug_info,
                             SUM(xx.supply_sign) as supply_sign,
                             LISTAGG(
                             CASE
                                      WHEN xx.pack_size = '1'
                                      THEN '小包装'
                                      ELSE '大包装'
                             END ||
                             CASE
                                      WHEN xx.supply_sign = '1'
                                      THEN '停止供应'
                                      ELSE '正常'
                             END, ';' ) AS supplSign
                        FROM drug_price    xx
                       WHERE (xx.org_id = 'H13018100523'
                                   OR xx.org_id = (SELECT parent_id
                                         FROM sys_company
                                        WHERE org_code = 'H13018100523'))
                    GROUP BY xx.drug_info ) supplySignTwo
                 ON supplySignTwo.drug_info = a.info_id
          LEFT JOIN his_vs_medical hvm
                 ON a.price_id = hvm.price_id
              WHERE a.del_flag = '0'
                AND b.del_flag = '0'
                AND a.inventory_is_show = '0'
                AND (a.org_id = 'H13018100523'
                            OR a.org_id IN (SELECT org_code
                                  FROM sys_company
                                 WHERE parent_id = 'H13018100523'))
                AND a.quantity != 0
                AND a.is_supply != 1 ) aaa
) tmp_count

经分析测试,去掉最外层的select count(1) 后,内层语句可以执行成功,或将内层left join的supplySignTwo部分去掉,sql带上 count(1) 也能执行成功。将sql有关的表ddl导出在本地测试库验证,可以复现问题。
使用新版本数据库验证,上述sql可以执行成功不会报错,对比了两个版本的dm.ini文件中不同的参数,经验证与参数值差异无关,应当是版本问题,升级至新版本即可解决。
本地测试使用的新版本为–03134284404-20251210-306367-20164 Pack16(8.1.4.116 pack16)

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服