首页 > 解决方案 > LEFT JOIN WHERE 不返回结果

问题描述

有两个带有列的表,我正在做一个基本的 LEFT JOIN:

情况1

SELECT g_users.id, g_users.username, f_list.user_id
FROM g_users

LEFT JOIN f_list 
    ON f_list.friend_id = g_users.id 

WHERE g_users.username IN ('meme', 'john', 'doe')
    AND g_users.id != 4

结果: 在此处输入图像描述

都好!

案例 2,应用于相同的记录

SELECT g_users.id, g_users.username, f_list.user_id
FROM g_users

LEFT JOIN f_list ON 
    f_list.friend_id = g_users.id 

WHERE g_users.username IN ('meme', 'john', 'doe')
    AND g_users.id != 4
    AND f_list.user_id != 4

结果: 在此处输入图像描述

我期待返回 doe 的记录,但它什么也没返回。我错过了什么?

标签: mysqlsql

解决方案


啊,NULL 处理的美妙世界。

当您在 WHERE 子句中与您要加入的表进行比较时,就会出现问题。你有那个 f_list.user_id != 4。对于与你的左连接不匹配的行,这个表达式正在评估 if null != 4,这是错误的,因为它是一个空值。

您有 2 个唯一匹配值,null和 4,它们都在上述语句中被排除在外,因此结果为 0 行。

要获得您想要的结果,您可以将 f_list.user_id 包装在一个空处理函数中,例如 COALESCE。


推荐阅读