千家信息网

数据库中如何使用LEFT JOIN优化多个子查询

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,小编给大家分享一下数据库中如何使用LEFT JOIN优化多个子查询,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.SQL
千家信息网最后更新 2026年11月01日数据库中如何使用LEFT JOIN优化多个子查询

小编给大家分享一下数据库中如何使用LEFT JOIN优化多个子查询,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1.SQL1

OLD:

SELECT COUNT (1) num  FROM (  SELECT t1.*            FROM t_asset t1           WHERE     1 = 1                 AND t1.TYPE = 0                 AND (   t1.status IN (1,                                       10,                                       11,                                       12,                                       100)                      OR (EXISTS                             (SELECT b.resource_id                                FROM t_asset_file b                               WHERE     t1.resource_id = b.asset_code                                     AND t1.status IN (3, 4, 8)                                     AND b.status IN (1,                                                      10,                                                      11,                                                      12))))                 AND (   EXISTS                            (SELECT 1                               FROM t_asset_file a1                              WHERE     t1.resource_id = a1.asset_code                                    AND (   a1.content_status = 1                                         OR a1.content_status = 4))                      OR NOT EXISTS                            (SELECT 1                               FROM t_asset_file a1                              WHERE t1.resource_id = a1.asset_code))        ORDER BY t1.create_time DESC, t1.resource_id) a;

优化方向: 合并多个t_asset_file子查询

优化方法: 使用left join 来代替子查询,把关联列放在group by中,将子查询中不同条件使用case when

SELECT COUNT (1) num  FROM (  SELECT t1.*            FROM t_asset t1,                 (  SELECT asset_code,                           MAX (CASE                                   WHEN status IN (1,                                                   10,                                                   11,                                                   12)                                   THEN                                      1                                   ELSE                                      0                                END)                              status,                           MAX (                              CASE                                 WHEN content_status = 1 OR content_status = 4                                 THEN                                    1                                 ELSE                                    0                              END)                              content_status                      FROM t_asset_file                  GROUP BY asset_code) t2           WHERE     t1.resource_id = t2.asset_code(+)                 AND t1.TYPE = 0                 AND (   t1.status IN (1,                                       10,                                       11,                                       12,                                       100)                      OR (t1.status IN (3, 4, 8) AND t2.status(+) = 1))                 AND ( (t2.content_status(+) = 1) OR (t2.asset_code IS NULL))        ORDER BY t1.create_time DESC, t1.resource_id) a;

2.SQL2

OLD:

  SELECT m.khbh, d.wzzbm, wmsys.wm_concat (m.rkid) rkids    FROM m@dblink m, d@dblink d   WHERE     m.rkid = d.rkid         AND m.rkzt = 2         AND m.ssny < '201311'         AND m.zxdid IS NULL         AND (   NOT EXISTS                        (SELECT 1                           FROM m@dblink m1, d@dblink d1                          WHERE     m1.rkid = d1.rkid                                AND m1.zxdid = m.rkid                                AND d1.wzzbm = d.wzzbm                                AND m1.rkzt = 3)              OR (SELECT SUM (d1.xysl)                    FROM m@dblink m1, d@dblink d1                   WHERE     m1.rkid = d1.rkid                         AND m1.zxdid = m.rkid                         AND d1.wzzbm = d.wzzbm                         AND m1.rkzt = 3) < d.xysl)GROUP BY m.khbh, d.wzzbm;

优化方向:合并重复的子查询

  SELECT m.khbh, d.wzzbm, wmsys.wm_concat (m.rkid) rkids    FROM m@dblink m, d@dblink d,                (select m1.zxdid,d1.wzzbm,                                sum(d1.xysl) sum_xysl                 from m@dblink m1,d@dblink d1                 where m1.rkzt = 3                 and m1.rkid = d1.rkid                 group by m1.zxdid,d1.wzzbm) z   WHERE     m.rkid = d.rkid         AND m.rkzt = 2         AND m.ssny < '201311'         AND m.zxdid IS NULL                 and z.zxdid=m.rkid                 and z.wzzbm=d.wzzbm         AND ( (z.zxdid is null and z.wzzbm is null)              OR z.sum_xysl < d.xysl)GROUP BY m.khbh, d.wzzbm;

3.SQL3

OLD:

select m.col1,d.col2,wmsys.wm_concat(m.col3) col3sfrom m,dwhere m.col3=d.col3and m.col6=2and m.col7<'201312'and m.col4 is nulland (not exists (select 1 from m m1,d d1                                  where m1.col3=d1.col3                                 and m1.col4=m.col3                                 and d1.col2=d.col2                                 and m1.col7< '201312'                                 and m1.col6=3) or         (select sum(d1.col5)          from m m1,d d1          where m1.col3=d1.col3          and m1.col4=m.col3          and d1.col2=d.col2          and m1.col7<'201312'          and m1.col6=3)

优化方向:

(1).主查询和子查询涉及表相同,并且条件有很多共同点,可以考虑合并。

(2).子查询结构相似,考虑使用left join来进行合并。

NEW:

with aa as(select m.col1,d.col2,m.col3,m.col4,d1.col5 from m,dwhere m.col3=d.col3and m.col6 in(2,3)and m1.col7< '201312')select aa.col1,aa.col2, wmsys.wm_concat(aa.col3) col3sfrom aa,         (select col4,col2,sum(d1.col5) sum_col5                from aa          where col6=3          group by col4,col2) bbwhere aa.col3=bb.col4(+)and aa.col2=bb.col2(+)and aa.col4 is nulland aa.col6=2and (bb.col4 is null or bb.sum_col5(+)

以上是"数据库中如何使用LEFT JOIN优化多个子查询"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

查询 多个 方向 篇文章 数据 数据库 内容 条件 不同 相似 相同 不怎么 共同点 大部分 方法 更多 知识 结构 行业 资讯 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网新科技 易互联网科技有限公司 互联网科技公司怎么样 南京欣网互联网科技 顺玮阁互联网科技 深圳期待互联网科技 科技伦理 互联网公司 蓝色互联网科技 北京大学互联网科技怎么样 华服互联网科技官网 亳州好赞互联网科技有限公司 国大互联网教育科技有限公司工作 西安小鹰速贷互联网科技有限公司 元气玛特互联网科技公司是外包吗 互联网企业科技类企业如何做账 杭州披云加互联网科技有限公司 恒生科技指数 中概互联网 河南商务圈互联网科技有限公司 宁波允成互联网科技有限公司 广州全民伙伴互联网科技有限公司 科技平台互联网 中国互联网科技股 科技企业和互联网企业 互联网科技社 广州互联网科技公司 互联网科技公司名称 畅思互联网科技 迪庆互联网科技招生 富国互联网金融科技混合基金 株洲百竞科技的互联网营销顾问
0