mysql - 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 的记录,但它什么也没返回。我错过了什么?
解决方案
啊,NULL 处理的美妙世界。
当您在 WHERE 子句中与您要加入的表进行比较时,就会出现问题。你有那个 f_list.user_id != 4。对于与你的左连接不匹配的行,这个表达式正在评估 if null != 4,这是错误的,因为它是一个空值。
您有 2 个唯一匹配值,null和 4,它们都在上述语句中被排除在外,因此结果为 0 行。
要获得您想要的结果,您可以将 f_list.user_id 包装在一个空处理函数中,例如 COALESCE。
推荐阅读
- javascript - 使用 Smoothstate 重新加载 Ajax 后未应用背景 CSS 属性
- gensim - doc2vec(gensim) infer_vector 需要窗口大小的填充句吗?
- database - 如何检查oracle数据库中的sql_trace?
- node.js - Graphql 服务器 + NodeJS,使用 Redis 将数据存储在缓存中
- jquery - 请求的资源上不存在“Access-Control-Allow-Origin”标头,响应的 HTTP 状态代码为 401
- angular - 不活动后Angular 4重定向
- wordpress - 是否可以使用负载平衡和自动缩放在 aws ec2 中创建 wordpress 站点
- ruby-on-rails - 如何将数据写入excel文件
- jenkins - 设置 Sonar-Gerrit 插件:无法在 UserAtHost 上执行命令“gerrit review”
- java - Elasticsearch 使用 RestHighLevelClient 设置限制和偏移量