Mysql-多个left join 计算逻辑
2023-09-11 14:19:36 时间
单个left join:
(1)一对一:结果表的行数=左表行数
(2)一对多:结果表的行数>左表行数
多个left join:
(0)多个left join由上到下,依次生成查询表,原理同单个left join
(1)需要补充的是,如果在left join a表之前,想先对a表做一个字段的筛选,不能在多个left join之后用where来条件过滤,因为,多个left join是优先于where执行的,如果用where是对多个left join之后的结果查询表进行的条件过滤。(这种很容造成结果错误,也就是结果数据不全)
应该用,left join ON 后+"and"去先过滤
a left join b ON a.id=b.id and a.isdel =0 b.status =1
left join c ON a.id =c.id and c.type=3
PS:有时候,单个left join、多个left join 需要跟select配合套多个"select马甲"使用,下边是一个很不错的常用模版套法:
(一般对于不知道什么时候起别名 什么时候用括号的老铁们 真实头疼 所以发个模板,可以根据自己的需求,进行套用)
https://www.cnblogs.com/LHWorldBlog/p/7753914.html
不多说 直接上语句
SELECT
a.id,
a.thumbNail,
a. NAME,
a.marketPrice,
a.memberPrice,
a.personName,
a. STATUS,
a.recieveOrderDate,
a.trackNumber,
a.contact,
a.reportSendDate,
b.trackNumber,
a.reportDownloadPath
FROM
(
SELECT
od.id,
ps.thumbNail,
ps. NAME,
od.marketPrice,
od.memberPrice,
od.personName,
od. STATUS,
od.recieveOrderDate,
ol.trackNumber,
ol.contact,
od.reportSendDate,
od.reportSendOrderLogisticId,
od.reportDownloadPath
FROM
orders.order_detail od
LEFT JOIN orders.order_logistics ol ON od.recieveOrderLogisticId = ol.id
LEFT JOIN orders.product_snapshot ps ON od.productSnapShotId = ps.id
WHERE
od.valid = TRUE
AND ol.valid = TRUE
AND od.orderId =?
) a
LEFT JOIN (
SELECT
ol.trackNumber,
od.id
FROM
orders.order_detail od
LEFT JOIN orders.order_logistics ol ON od.reportSendOrderLogisticId = ol.id
WHERE
od.valid = TRUE
AND ol.valid = TRUE
AND od.orderId =?
) b ON a.id = b.id
相关文章
- Mysql远程连接数据库报错排查:pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '**.**.**.**' (timed out)")
- 【C/C++学院】(23)Mysql数据库编程--C语言编程实现mysql客户端
- 要想深入理解mysql索引?这16个点你必须要了解!
- 【MySQL】批量删除mysql中数据库中的表
- 【异常】ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock
- MySQL按照汉字的拼音排序,mysql汉字排序
- mysql中json_extract函数的使用?作用是什么?
- Function mysql_db_query() is deprecated 错误解决
- 性能测试:监控mysql数据库
- MySQL用GROUP BY分组取最新一条数据
- 【问题解决方案】MySQL安装后无法启动-net start mysql服务名无效
- MySql中json类型的使用___mybatis存取mysql中的json
- MySQL索引详解
- [转]MySql ibdata1文件太大如何缩小
- Atitit 常见触发器功能总结 目录 1.1. mysql触发器实例 插入数据前更改数据值.mhtml1 1.2. 数据修改后更改数据值1 1.3. 不能为空检测约束。。1 2. Ref2
- 云数据库RDS中的MySQL数据库备份
- mysql的limit用法、逻辑分页和物理分页
- ERROR 3009 (HY000): Column count of mysql.user is wrong. Expected 45, found 43. Created with MySQL 5
- MySQL 可以用localhost 连接,但不能用IP连接的问题,局域网192.168.*.* 无法连接mysql
- 5.中文问题(自身,操作系统级别,应用软件的本身),mysql数据库备份
- file /usr/share/mysql/charsets/README from install of MySQL-server-5.1.73-1.glibc23.i386 conflicts with file from package mysql-libs-5.1.73-8.el6_8.i686
- debian 安装mysql 8.0
- 安全测试===Mysql 注入技巧学习 MySQL注入技巧(1)
- mysql_18 _ 为什么这些SQL语句逻辑相同,性能却差异巨大
- 【MySql】MySQL数据库--什么是MySQL的回表 ?
- MySQL-存储过程
- MySQL-查询语句