草莓果冻⁣  2023-04-21 11:36 采纳率: 64.3%
浏览 55
已结题

mysql多表联查,子查询问题

需求:统计表只有“cre_date”字段有值,现在需要根据“cre_date”字段从另外四张表的中计算总值,并赋值到统计表“transactions”字段中

问题:我写的sql不知道是因为子查询太深了获取不到父查询的结果,还是因为其他原因,请教一下大家该如何修改

有五张表:

t_summary_yesterday --统计表
|--表内字段:id --主键递增,cre_date --创建时间,transactions --交易总额

t_data_a_transaction_deal --a类型交易处理表
|--表内字段:id --主键递增,cre_date --创建时间,trans_amount--交易额
t_data_a_transaction --a类型交易表
|--表内字段:id --主键递增,cre_date --创建时间,trans_amount--交易额

t_data_b_transaction_deal --b类交易处理表
|--id --主键递增,cre_date --创建时间,transactions --交易额
t_data_b_transaction --b类交易表
|--id --主键递增,cre_date --创建时间,transactions --交易额

以下是我写的sql

SELECT
    z.cre_date,
    (
    SELECT
        sum( transactions )
    FROM
        (
        SELECT TRUNCATE
            ( COALESCE ( sum( s.transactions ), 0 ), 2 ) AS transactions 
        FROM
            (
            SELECT TRUNCATE
                ( COALESCE ( sum( t.trans_amount ), 0 ), 2 ) AS transactions 
            FROM
                t_data_a_transaction_deal t 
            WHERE
                t.cre_date = z.cre_date  UNION ALL
            SELECT TRUNCATE
                ( COALESCE ( sum( t.trans_amount ), 0 ), 2 ) AS transactions 
            FROM
                t_data_b_transaction_deal t 
            WHERE
                t.cre_date = z.cre_date 
            ) AS s 
      UNION ALL
        SELECT TRUNCATE
            ( COALESCE ( sum( s.transactions ), 0 ), 2 ) AS transactions 
        FROM
            (
            SELECT TRUNCATE
                ( COALESCE ( sum( t.trans_amount ), 0 ), 2 ) AS transactions 
            FROM
                t_data_a_transaction t 
            WHERE
                t.cre_date = z.cre_date UNION ALL
            SELECT TRUNCATE
                ( COALESCE ( sum( t.trans_amount ), 0 ), 2 ) AS transactions 
            FROM
                t_data_b_transaction t 
            WHERE
                t.cre_date = z.cre_date 
            ) AS s 
        ) AS c 
    ) AS 'transactions' 
FROM
    t_summary_yesterday z 

sql执行后的结果

1054 - Unknown column 'z.cre_date' in 'where clause'

  • 写回答

2条回答 默认 最新

  • 乐享技术 2023-04-21 12:01
    关注

    1、子查询中的z是感知不到主查询,每个子查询都是独立的
    2、写法可以如下

    
    ```sql
    update t_summary_yesterday a,
        (select cre_date,sum(transactions) transactions from (
            select  cre_date,sum(trans_amount) transactions from t_data_a_transaction_deal group by 1
            union all 
            select  cre_date,sum(trans_amount) transactions from t_data_a_transaction group by 1
            union all 
            select  cre_date,sum(transactions) transactions from t_data_b_transaction_deal group by 1
            union all 
            select  cre_date,sum(transactions) transactions from t_data_b_transaction group by 1
            ) tmp_a group by 1
        ) b 
    set a.transactions=b.transactions
    where a.cre_date=b.cre_date
    
    

    ```

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月21日
  • 已采纳回答 4月21日
  • 创建了问题 4月21日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来