You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LEFT JOIN使用问题咨询:我的这条SQL左连接查询存在什么错误?

你的LEFT JOIN问题分析与修复方案

嘿,我来帮你拆解下这个LEFT JOIN的问题~

你当前的SQL查询里,虽然用了LEFT JOIN,但把LDN.language_id = 1放在了WHERE子句中,这直接抵消了LEFT JOIN的核心特性,让它的效果和INNER JOIN完全一样了。

问题根源

LEFT JOIN的设计初衷是:即使右表(LsDiseaseName)没有匹配到符合条件的行,左表(LsDiseases)的行也会被保留,右表对应的列会填充为NULL。但当你在WHERE子句中添加LDN.language_id = 1时,一旦右表没有匹配行,LDN.language_id的值是NULL,而NULL = 1的判断结果是不成立的,这些本该被保留的左表行就会被WHERE条件过滤掉,最终结果就和用INNER JOIN查询的结果一致了。

修复方案

把LDN.language_id = 1这个条件移动到LEFT JOIN的ON子句中,这样在进行表匹配的时候就只会筛选右表中language_id=1的行,即使没有匹配到,左表的行依然会被保留:

SELECT 
    LD.id AS disease_id, 
    LD.disease_name_en AS disease_name_en, 
    LDN.disease_name AS disease_name, 
    LDN.description AS description, 
    LD.image_link AS image_link 
FROM LsDiseases AS LD 
LEFT JOIN LsDiseaseName AS LDN 
    ON LDN.disease_id = LD.id 
    AND LDN.language_id = 1  -- 将条件移至此处
WHERE LD.id = 1

这样修改后,如果id=1的疾病在LsDiseaseName中没有language_id=1的对应记录,查询结果依然会返回该疾病的基础信息(disease_id、disease_name_en、image_link),而disease_name和description会显示为NULL,这才符合LEFT JOIN的预期效果。

内容的提问来源于stack exchange,提问作者AndreaNobili

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:34:20