使用left join 查询后右表数据为空仍能查询出一条数据

MySQL面试考点整理 一、内外连接 内连接: 只连接匹配的行 左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行 右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行 全外连接: 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。 交叉连接: 生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的... 阅读详情

在做查询时偶然发现的问题,简单记录一下!!

我的sql:

SELECT   a.*, GROUP_CONCAT( d.teacherName ) 'teacher_name', e.studentNum 'student_num' 
FROM   school_class a
LEFT JOIN (
    SELECT
        a.*, IFNULL( b.`name`, '' ) 'teacherName' 
    FROM class_teacher a  LEFT JOIN teacher b ON a.teacher_id = b.id 
    WHERE       a.school_class_elective_ids != '' 
    ) d ON LOCATE( a.id, d.school_class_elective_ids )
 LEFT JOIN (
    SELECT
        a.class_elective_id,
        a.school_session_text,
        IFNULL( COUNT( * ), 0 ) 'studentNum' 
    FROM
        class_student_access a 
    WHERE
        a.school_session_text >= '2018' 
    GROUP BY
        a.class_elective_id,
        a.school_session_text 
) e ON ( a.id = e.class_elective_id AND a.school_seesion_text = e.school_session_text ) 
WHERE    a.type = 'elective'    AND a.school_seesion_text >= '2018' 

LIMIT 0,20

执行结果:

出现问题原因:

group_concat()函数的问题

 解决方法:

把用到group_concat()函数的查询作为一个结果集进行左连接

如下:

SELECT
    a.*,
    d.teacherName 'teacher_name',
    e.studentNum 'student_num' 
FROM
    school_class a
    LEFT JOIN (
        SELECT a.id,GROUP_CONCAT(b.teacherName) 'teacherName' from school_class a 
        LEFT JOIN (
            SELECT b.*,t.`name` 'teacherName' from class_teacher b
            LEFT JOIN teacher t on b.teacher_id = t.id
        )b on LOCATE(a.id,b.school_class_elective_ids)
        WHERE a.type = 'elective'
            GROUP BY a.id
    ) d ON a.id = d.id
    LEFT JOIN (
    SELECT
        a.class_elective_id,
        a.school_session_text,
        IFNULL( COUNT( * ), 0 ) 'studentNum' 
    FROM
        class_student_access a 
    GROUP BY
        a.class_elective_id,
        a.school_session_text 
    ) e ON ( a.id = e.class_elective_id AND a.school_seesion_text = e.school_session_text ) 
WHERE
    a.type = 'elective' 
    AND a.school_seesion_text >= '2018' 
    LIMIT 0,20

执行结果如下:
        

 问题解决!!

【MySQL】提高篇—复杂查询:多表连接(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN) INNER JOIN:只返回两个表中匹配的记录。LEFT JOIN:返回左表的所有记录及右表中匹配的记录。RIGHT JOIN:返回右表的所有记录及左表中匹配的记录。FULL JOIN:返回两个表中的所有记录(通过 UNION 实现)。这些连接操作在实际应用中非常重要,能够帮助我们从多个表中提取和组合数据,以满足复杂的查询需求。 阅读详情

相关推荐

SQL LEFT JOIN 关键字

LEFT JOIN 是 SQL 中的一个连接关键字,用于从多个表中提取数据。LEFT JOIN 与 INNER JOIN 不同之处在于,LEFT JOIN 会返回左表中的所有记录,即使在右表中没有匹配的记录。LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。

xiaoaque的博客 1265

MySQL左连接右表数据为Null,查询右表条件时,右表数据为Null的左表数据会被过滤的的解决方法

MySQL左连接右表数据为Null,查询右表条件时,右表数据为Null的左表数据会被过滤的的解决方法。

ordinary_csdn的博客 3212

告别手动点鼠标:用Python脚本批量跑ADS版图仿真,效率提升10倍(附完整代码)

本文详细介绍了如何利用Python脚本自动化ADS版图仿真流程,显著提升射频工程师的工作效率。通过调用ADS底层接口,实现参数化修改、批量任务调度和结果自动收集,解决了手动操作中的常见问题,如仿真不更新等。附完整代码,帮助开发者快速实现10倍效率提升。

weixin_42523543的博客 332

LEFT JOIN右表为空查询不出数据

表结构如下 表Table_A: id name 1 张三 2 赵四 3 王五 表Table_B: id type 1 1 2 2 3 3 想查询出A表中所有的结果并关联B中特定字段,如下表 id name type 1 张三 1 2 赵四 null 3 王五 null 错误SQL: SELECT A.* ,B.ty...

olive 3万+

MATLAB实战:用ARMAX模型搞定电力系统惯量实时评估(附完整代码)

本文详细介绍了如何利用MATLAB中的ARMAX模型实现电力系统惯量的实时评估。通过系统辨识技术,结合电力系统的动态特性,提供从数据预处理、模型辨识到实时评估的全流程实战指南,并附完整代码。ARMAX模型在新能源高渗透率电网中展现出显著优势,误差较传统方法降低50%以上。

b9c0d的博客 399

激光雷达-IMU标定工具lidar_imu_calib保姆级教程(VLP-16实测)

本文提供激光雷达与IMU联合标定的详细实战教程,重点解析lidar_imu_calib工具在VLP-16上的应用。从环境部署、数据采集技巧到参数配置与结果验证,手把手指导完成标定全流程,并详解如何在LIO-SAM等SLAM系统中应用标定结果,确保传感器融合精度。

food6的博客 475

【关于mysql:SQL中的左外连接,右表中缺少数据的左表列也显示出来】

左表右表当你需要查询letter_data中branch_id中的数量并通过branch表连接查询,查询语句这种left join on后的where条件会使原本在on之后查询左表的字段筛选掉,从而即使左表的字段所count的值为null也不显示出来。

qq_45442178的博客 2411

DBeaver配置本地mysql-connector驱动文件

本文摘要:介绍了数据库驱动管理的基本操作步骤:1)新建驱动管理器,填写MySQL驱动名称、类名和类型;2)添加本地MySQL驱动文件;3)创建数据库连接并测试。适用于MySQL5.x和8.x版本,帮助用户快速配置数据库连接。

litlit023的专栏 1699

hive之left semi join(左半连接)使用方法

目录 一、建表数据准备 二、语法 三、left semi join例子 四、left semi join、join、left join的区别 1、left semi join 2、left join 3、join 结语 一、建表数据准备 参考hive之full outer join(全连接)使用方法_IMezZ的博客-优快云博客目录介绍语法例子创建顾客表:customers创建订单表:ordersfull outer join语句 left join + union + right

ImezZ 2万+

手把手教你用 Cursor 写一个完整的 Web 应用(含前后端 + 部署)

本文介绍如何利用Cursor AI工具从零开发一个完整的全栈待办事项Web应用。文章针对开发者常见痛点——无法独立完成项目闭环,提供了一套AI驱动的全栈开发范式。通过Vue3+Node.js+MySQL技术栈,全程由Cursor自动生成项目架构、前后端代码、数据库设计,并解决联调、部署等关键问题。重点展示了如何用AI完成:项目规划与架构设计、后端接口开发、前端页面实现、跨域联调、打包优化及云端部署全流程。该方法将传统需要3-5天的开发工作压缩至1小时内完成,产出规范可上线的项目,特别适合想突破"碎

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 640

基于Python实现人脸识别相似度对比

随着人工智能技术的不断进步,人脸识别成为了一种广泛应用的技术。人脸相似度对比是其中的一个重要应用场景,可以用于人脸搜索、身份验证等方面。本文将介绍如何使用Python实现人脸相似度对比。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 9810

LEFT JOIN条件在on后面和在where后面的区别

LEFT JOIN条件在on后面和在where后面的区别一、left join 的实际运用二、两表联查SQL区别1、在on后面补全条件2、在where后面补全条件三、三表联查SQL区别1.错误示范:1.1 连续使用left join,on后面过滤条件1.2 连续使用left join,where后面过滤条件2.正确操作:2.1将test2和test3作为整个右表查询四、结论 一、left join 的实际运用 left join 一般用于显示左边所有数据,并携带右表的数据; 而在on后面进行条件过滤,只会过

qq_43479628的博客 9971

基于STM32设计的老人摔倒检测报警系统【升级版】(235)

在 `235 基于STM32设计的老人摔倒检测报警系统(OneNet+MQTT)` 项目基础上增加了心率、血氧、体温测量3个功能。

1511

SQL--LEFT JOIN 右表多条数据解决方案

用到SQL中的LEFT JOIN时,在右表中存在多条记录,即一对多的情况时, 表结构与数据: CREATE TABLE `image` ( `id` int(11) NOT NULL AUTO_INCREMENT, `productId` int(11) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=ut

Angus博客 1万+

YOLOv11 知识蒸馏完整实战:Teacher–Student 训练策略与性能飞跃

在self.alpha = alpha # 蒸馏损失权重self.temperature = temperature # 温度系数,控制分布平滑度# 输出分布蒸馏(KL散度损失)# 中间特征蒸馏(MSE损失,对齐中间层特征)# 总蒸馏损失知识蒸馏是YOLOv11在“小模型高性能部署”场景的“破局之法”——它让小模型能“站在大模型的肩膀上”,兼具速度与精度。从损失函数定义到多阶段训练,再到实战落地,本教程已为你铺就了一条清晰的路径。

m0_64661770的博客 141

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

关于 LEFT JOIN 的使用注意事项

在 SQL 中,‌连续的 LEFT JOIN 操作的左表是前面所有 JOIN 操作后的中间结果‌,而右表是当前 LEFT JOIN 指定的表。结果集‌: 保留所有 A + B 的记录,并附加匹配的 C 记录(未匹配的 C 字段为 NULL)。最终结果‌:保留所有 A 的记录,依次附加 B、C、D 的匹配数据(未匹配的字段为 NULL)。结果集‌: 包含所有 A 的记录,以及匹配的 B 记录(未匹配的 B 字段为 NULL)。左表‌: 第一次 LEFT JOIN 后的结果集(即 A + B 的数据)

qq_22201881的博客 2281

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

mysql left join 右表数据不唯一的情况解决方法

转自http://blog.youkuaiyun.com/fdipzone/article/details/45119551 1.left join 基本用法 mysql left join 语句格式 A LEFT JOIN B ON 条件表达式 left join 是以A表为基础,A表即左表,B表即右表。 左表(A)的记录会全部显示,而右表(B)只会

sinat_30397435的博客 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

inner join,left join和right join的区别

连接类型是否保留左表所有行?是否保留右表所有行?未匹配的字段填充INNER JOIN❌❌不保留未匹配行LEFT JOIN✔️❌右表字段为NULLRIGHT JOIN❌✔️左表字段为NULL。

m0_74642957的博客 2090

left join和right join

SQL LEFT JOIN 关键字 LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。 LEFT JOIN 关键字语法 SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=tab...

二黑的博客 1万+

left join 右表多条数据重复

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!                mysql的left

yrryyff的博客 1万+

mysql left join 右表数据不唯一的情况解决方法 left join查询条数

1.left join 基本用法 mysql left join 语句格式 ALEFT JOINBON条件表达式 left join是以A表为基础,A表即左表,B表即右表。 左表(A)的记录会全部显示,而右表(B)只会显示符合条件表达式的记录,如果在右表(B)中没有符合条件的记录,则记录不足的地方为NULL。 例如:news与news_category表的结构如下,news表的category_id与news_category表的id是对应关系。 news 表 id tit...

tanghuan0827的博客 1197

如何使用LEFT JOIN实现多表查询

什么是LEFT JOIN请各位自行了解,废话不多说,先直接上三张表 组织表(t_organization) 部门表(t_department) 用户表(t_user) 逻辑是组织下面有部门,部门下面有用户,组织和部门通过organization_id字段关联,部门和用户通过department_id关联   实现以下几种查询 1.两张表的查询: 查询所有组织信息以及下属...

BigpotR 10万+

leftjoin多表联合查询_使用LEFT JOIN实现多表查询

1.问题最近,发现车间在使用条码打印系统打印的时候,为了打印条码,从系统生产任务单中一个一个复制到EXCEL表中,然后根据事先设置的模板进行批量打印,这种重复性的CTRL+C和CTRTL+V不但效率低,而且还容易出错。通过查看,数据库系统为POSTGRESQL10.0,相关的数据表有三个,分别为mrpproduction、stockproductionlot、producttemplat...

weixin_39555179的博客 3795

mysql使用left join where右表条件无效,变成inner join 或 单表查询效果

问题描述: select * from A left join B on A.id = B.aid where B.字段 = xxx 如果使用left join以A为主表,并查询A表全部数据,和关联的B表数据 where后面就不能出现B表的条件,否则会变成inner join效果,或理解为单表查询效果 举例说明: (假设有两张表) A表 战队表 team: B表 成员表 t...

github_39325328的博客 5189

Oracle中left join中右表的限制条件

无过滤条件的LEFT JOIN SQL中最简单形式的LEFT JOIN,是直接根据关联字段,以左表为基准,对右表进行匹配。在SELECT语句中选取的字段,如果有右表的记录(一般都是需要右表的某些记录的),取出配对成功的右表记录中对应的这个字段的值;否则,直接置NULL。这本身就是LEFT JOIN的特点:保证左表记录完整,右表只是辅助匹配。 直接看例子,为了演示,准备了两张测试表test1,tes...

极客神殿 1230
下一篇: 记录spring boot 整合shiro后 引入swagger2遇到的坑
chuangge_java
博客等级 码龄8年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值