Codeigniter Model双表关联查询:无匹配数据返回null的实现问题
解决tb_form与tb_pendaftaran关联查询的缺失记录问题
嘿,我来帮你搞定这个问题!你遇到的异常根源其实是连接类型用错了——如果之前用的是内连接,那在场景2里必然会丢失tb_form中没有对应tb_pendaftaran记录的数据,这完全不符合你要保留所有judul的需求。
正确的SQL实现方案
你需要用**左连接(LEFT JOIN)**来实现需求,把tb_form作为左表,确保它的所有记录都能被保留,没有匹配的tb_pendaftaran记录时,value字段自动返回null:
SELECT f.judul, p.value FROM tb_form f LEFT JOIN tb_pendaftaran p ON f.id_form = p.id_form;
为什么这个写法能解决问题?
LEFT JOIN的核心逻辑是:强制保留左表(tb_form)的所有行,右表(tb_pendaftaran)中能匹配上id_form的就返回对应的value,匹配不上的字段就用null填充。- 不管是场景1(所有id_form都有匹配)还是场景2(仅部分匹配),这个查询都能返回tb_form的全部
judul,完美贴合你的需求。
对比错误写法(你大概率之前用的是这个)
如果之前用的是内连接,就会出现场景2的异常:
-- 错误写法:仅返回两边都存在匹配的记录 SELECT f.judul, p.value FROM tb_form f INNER JOIN tb_pendaftaran p ON f.id_form = p.id_form;
这个查询在场景2里只会返回3条匹配的记录,剩下2条tb_form的记录会被直接丢弃,这就是你遇到异常的原因。
内容的提问来源于stack exchange,提问作者Raven Choi
相关产品推荐
相关产品推荐

