Snowflake执行子查询遇函数'='参数类型不匹配错误,请求解决
SQL错误排查与解决
错误原因分析
- 最内层子查询返回
event_name和category两个字段,但pt.event_name IN (...)要求子查询返回单列数据,导致字符串类型与行类型无法匹配,触发类型错误。 - 中间子查询返回
event_name和physician_id两个字段,外层ph.physician_id IN (...)仅需要单列的physician_id,冗余的字段进一步加剧了类型不匹配问题。
修正后的子查询写法
SELECT ph.physician_id FROM physician_speciality ph WHERE ph.physician_id IN ( SELECT pt.physician_id -- 仅返回需匹配的physician_id列 FROM patient_treatment pt WHERE pt.event_name IN ( SELECT ec.event_name -- 仅返回需匹配的event_name列 FROM event_category ec WHERE ec.category = 'Procedure' ) );
更高效的JOIN写法
用JOIN替代嵌套子查询,通常性能更优,同时避免类型匹配问题:
SELECT DISTINCT ph.physician_id FROM physician_speciality ph JOIN patient_treatment pt ON ph.physician_id = pt.physician_id JOIN event_category ec ON pt.event_name = ec.event_name WHERE ec.category = 'Procedure';
添加DISTINCT是为了避免同一医生ID因多次执行操作被重复返回。
预期结果
根据提供的样本数据,最终会返回以下符合条件的医生ID:1000、2000、4000、6000
内容的提问来源于stack exchange,提问作者AdhiHari
相关产品推荐
相关产品推荐

