BitZ2 2023-07-28 14:28 采纳率: 50%
浏览 3
已结题

sql多表连接查询查询

select count(*) from (
       SELECT trade_type, txn_tms, pay_type, txn_num, txn_amt, shift_id, DEVICE_NID, cur_station
        FROM AFC_CC_USER.DETAIL_NOD_TRANSACTION_RECORD_NORMAL
        WHERE SUBSTR(DEVICE_NID, 5, 2) = '03'
        UNION ALL
        SELECT trade_type, txn_tms, pay_type, txn_num, txn_amt, shift_id, DEVICE_NID, cur_station
        FROM AFC_CC_USER.DETAIL_NOD_TRANSACTION_RECORD_ADJUST
        WHERE SUBSTR(DEVICE_NID, 5, 2) = '03'
    )a 
    left join tbl_civil_service b on a.shift_id = b.shift_id AND TO_CHAR(a.TXN_TMS, 'YYYY-MM-DD') = TO_CHAR(b.CUR_TMS, 'YYYY-MM-DD')
    WHERE a.txn_tms >= '2023-07-26 00:00:00' AND a.txn_tms <= '2023-07-26 23:00:00'

这段代码有什么问题,大家帮忙看看解答一下,a表26号就101条数据,b表15条,但是left join之后就变几千条了,咋优化

  • 写回答

4条回答 默认 最新

  • Watch the clown 2023-07-28 14:49
    关注

    这两张表是不是有相同的字段和数据,不建议使用union all,你可以把前两个表的复合结果放在cte里,并且对相同字段设置非聚簇索引,那么他就走走的是index search 而不是range search

    img

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月29日
  • 创建了问题 7月28日