SQL外键关联表左连接无匹配值返回空白的查询实现
核心实现逻辑
需要将PAR表作为主表左外连接AT表,关联字段为两者共有的主键A,再通过空值处理函数将未匹配到的C字段转换为'blank'即可。
正确查询语句
全数据库兼容版本(使用标准SQL函数)
SELECT PAR.A, COALESCE(CAST(AT.C AS CHAR), 'blank') AS C FROM PAR LEFT JOIN AT ON PAR.A = AT.A;
注:
CAST(AT.C AS CHAR)是为了统一整数类型C和字符串'blank'的返回类型,避免部分数据库报类型不匹配错误。
MySQL专属简化版本
SELECT PAR.A, IFNULL(AT.C, 'blank') AS C FROM PAR LEFT JOIN AT ON PAR.A = AT.A;
原语句错误原因
- 混用隐式内连接语法(
FROM PAR AS P, AT AS A)和左连接语法,会先对两张表做笛卡尔积再执行后续连接,逻辑完全错误 - 引用了不存在的表
PARTICIPANT,你的库中只有PAR、AT两张业务表 - 额外加了
WHERE A.C IS NULL过滤条件,会把已经匹配到AT表数据的行全部筛掉,只能返回未匹配的C2036、D2000两行,不符合输出全部PAR表数据的需求
内容的提问来源于stack exchange,提问作者Morello
相关产品推荐
相关产品推荐

