多表SQL查询需求:保留GL表所有交易,允许WF表字段为NULL
解决GL表全量交易记录的多表关联查询问题
你遇到的问题本质是内连接和左连接的逻辑差异:用WHERE做表关联属于内连接逻辑,只会返回两张表都有匹配的记录;而你需要的左连接(LEFT JOIN)会保留左表(GL表)的所有行,右表(WF表)无对应匹配时返回NULL。
正确的SQL写法示例
假设两张表的关联字段是transaction_id,正确的左连接查询如下:
SELECT gl.*, wf.* -- WF无匹配时,这些字段会显示为NULL FROM gl_table gl LEFT JOIN wf_table wf ON gl.transaction_id = wf.transaction_id;
关键注意点
如果需要对WF表的字段加过滤条件,必须把条件写在LEFT JOIN的ON子句里,而不是WHERE子句。比如要筛选WF表中状态为已审批的记录,但仍保留所有GL交易:
SELECT gl.*, wf.* FROM gl_table gl LEFT JOIN wf_table wf ON gl.transaction_id = wf.transaction_id AND wf.status = 'approved'; -- 仅过滤WF的匹配行,不影响GL全量记录
要是把wf.status = 'approved'放到WHERE里,会直接过滤掉WF字段为NULL的GL记录,回到和内连接一样的结果。
内容的提问来源于stack exchange,提问作者Mona
相关产品推荐
相关产品推荐

