美文网首页
join关联表子查询提示没有为 'DetailX' 的列 2 指

join关联表子查询提示没有为 'DetailX' 的列 2 指

作者: 吉凶以情迁 | 来源:发表于2023-12-27 09:52 被阅读0次

刚开始以为 不支持提前汇总,后面发现需要给汇总的列 指定别名, 低级错误

SELECT 
    A.*, 
    B.name, 
    AVG(B.col2) AS avg_col2, 
    SUM(B.col3) AS sum_col3, 
    C.start_time, 
    C.end_time
FROM 
    A
LEFT JOIN (
    SELECT 
        name, 
        col2, 
        col3 
    FROM 
        B
    WHERE 
        EXISTS (
            SELECT 1 
            FROM C 
            WHERE B.insert_time BETWEEN C.start_time AND C.end_time
        )
    GROUP BY 
        name, 
        col2, 
        col3
) AS B ON A.sid = B.sid
LEFT JOIN C ON A.cid = C.cid
-- 添加其他JOIN的表
GROUP BY 
    A.sid, 
    A.col1, 
    A.col2, 
    A.col3, 
    B.name, 
    C.start_time, 
    C.end_time;

假设B表有10个name和a匹配,我只需要一个, 但是b表所有name的数据我都要,就要提前汇总,不然会出现重复数据影响整体计算
提前汇总

SELECT 
    A.*, 
    B.name, 
    B.avg_col2, 
    B.sum_col3, 
    C.start_time, 
    C.end_time
FROM 
    A
INNER JOIN (
    SELECT 
        name, 
        AVG(col2) AS avg_col2, 
        SUM(col3) AS sum_col3
    FROM 
        (
            SELECT 
                B1.name, 
                B1.col2, 
                B1.col3 
            FROM 
                B AS B1
            INNER JOIN C AS C1 ON B1.insert_time BETWEEN C1.start_time AND C1.end_time
        ) AS B_filtered
    GROUP BY 
        name
) AS B ON A.sid = B.name -- 假设name是关联键
LEFT JOIN C ON A.cid = C.cid
-- 添加其他JOIN的表
GROUP BY 
    A.sid, 
    A.col1, 
    A.col2, 
    A.col3, 
    B.name, 
    B.avg_col2, 
    B.sum_col3, 
    C.start_time, 
    C.end_time;

但是如果要根据外部c表关联汇总, 几个name对应一个总数 ,和外部的c表关联是做不到了,只能在子查询里面再关联,外部再关联

相关文章

  • MySQL中的join以及on条件的用法

    join 经常用来做关联查询,可以把两张或者多张表用通过关联条件关联起来做数据查询在使用join查询的时候要区分主...

  • Semijoin 半连接

    什么是semi-join? 所谓的semi-join是指semi-join子查询。 当一张表在另一张表找到匹配的记...

  • Sql之join多种用法

    sql优化中常用的就是将表关联或子查询改为join的用法,那么join的用法有很多种,下面我们一一看下。参考:ht...

  • 多表联结

    ( 表1 LEFT JOIN 表2 ON 条件) LEFT JOIN 表3 ON 条件 原理是,表1和表2 的查询...

  • 七、SQL–子查询③(列子查询)

    列值子查询 与标量子查询不同,列值子查询可以返回一个多行多列的结果集。这样的子查询又被称为表子查询,表子查询可以看...

  • SQL语法纠正

    执行顺序①from查询表②join关联表③on字段条件④where字段条件⑤group by分组字段⑥having...

  • 2019-11-27_关联查询

    1.左关联 a left join b on a.c = b.c left join 已a为基准,查询出a表中的所...

  • sqlzoo练习10-join quiz

    Join opetation指的是不同的表之间通过某个相同的字段进行关联,从而进行查询操作。本文是对Join操作的...

  • 十六、SQL JOIN

    SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。 SQL LEFT JOIN 关键字 ...

  • mysql 优化

    用 join 代替子查询子查询 join

网友评论

      本文标题:join关联表子查询提示没有为 'DetailX' 的列 2 指

      本文链接:https://www.haomeiwen.com/subject/atyrndtx.html