mysql中多个left join子查询写法以及别名用法

本文提供了一个MySQL中的复杂查询实例,通过使用LEFT JOIN进行多表关联,并展示了如何正确使用子查询和表别名来简化SQL语句,适用于需要从订单详情中获取物流跟踪信息等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不多说 直接上语句  
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
 
 
ps:解释下 对于Mysql中的语句,牵扯到左查询时  可以用left join关联  但一般对于不知道什么时候起别名 什么时候用括号的老铁们 真实头疼  所以发个模板 剩下的根据自己的业务具体实施。
### MySQL多表联查:学生与班级的示例 在MySQL,多表联查是一种常见的操作方式,用于从多个表提取所需的数据。以下是基于学生和班级关系的一个具体示例。 #### 查询需求 假设有一个场景:我们需要查询出一班成绩高于二班最低成绩的学生信息。这可以通过`LEFT JOIN`以及查询的方式实现。 #### SQL语句示例 ```sql SELECT DISTINCT student.* FROM sc LEFT JOIN student ON sc.sid = student.sid WHERE student.classid = 1 AND score > ANY ( SELECT score FROM sc LEFT JOIN student ON sc.sid = student.sid WHERE student.classid = 2 ); ``` 上述SQL语句的功能如下: - `sc` 表存储学生的课程分数记录。 - `student` 表存储学生的基本信息及其所属班级。 - 使用 `LEFT JOIN` 将两个表连接起来,以确保即使某些学生成绩不存在也能返回其基本信息[^5]。 - 条件部分筛选了一班 (`classid=1`) 的学生,并且这些学生的成绩要大于二班 (`classid=2`) 任意一个学生的最低分[^2]。 #### 自关联查询的应用 如果需要在一个表内部进行比较或者查找父关系等复杂逻辑时,可以采用自关联查询的方法。例如,在同一个表找到某个字段与其他行的关系: ```sql SELECT t1.name, t1.parent_id, t2.name AS parent_name FROM tree_table t1 LEFT JOIN tree_table t2 ON t1.parent_id = t2.id; ``` 这里的关键在于为同一张表赋予不同的别名(如`t1`, `t2`),从而能够区分不同角色下的相同数据结构[^3]。 #### 查询依赖外部上下文的情况 需要注意的是,当查询涉及到外层查询的列时,必须保证该查询是在整体查询框架下运行的。比如下面这个错误的例会引发异常:“Unknown column 'o.cno' in 'where clause'”,因为单独执行查询无法识别来自外部查询的变量`o.cno`[^4]。 正确写法应保持查询嵌套于主查询,而不是独立出来测试。 --- ### 总结 以上展示了如何利用MySQL完成针对学生和班级之间复杂的多表联合查询任务,包括但不限于跨表条件过滤、使用集合函数(`ANY`)处理不平等匹配等问题解决思路。同时强调了自关联技术的重要性及注意事项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L先生AI课堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值