如何在SELECT查询中编写JOIN关联子查询并解决多行返回错误
错误原因
写在SELECT后的子查询属于标量子查询,要求必须返回单行单列结果。你当前的子查询没有和外层LOAD表的单行做关联,会返回全量符合JOIN条件的location_key,行数大于1,因此触发报错。且你在子查询中重复JOIN LOAD表属于冗余逻辑,完全不需要嵌套子查询实现需求。
修正方案
直接在外层查询做两表关联即可,修正后代码如下:
USE DATABASE PROD_DWH; SELECT CAST(l.dwh_masterclient_id AS smallint) AS dwh_masterclient_id, loc.location_key AS carrier_company_name, 1 AS exception_codes FROM INGEST.LOAD_ l LEFT JOIN INGEST.LOCATION_ loc ON l.dwh_masterclient_id = loc.dwh_masterclient_id;
- 上面用LEFT JOIN可以保留LOAD表所有dwh_masterclient_id记录,即使LOCATION表无匹配时carrier_company_name返回NULL;如果只需要两张表都存在对应dwh_masterclient_id的匹配记录,把LEFT JOIN改成INNER JOIN即可。
- 代码中给表加了别名简化写法,避免字段名冲突混淆。
内容的提问来源于stack exchange,提问作者x89
相关产品推荐
相关产品推荐

