当前位置: 代码迷 >> Oracle技术 >> 求一大数据量SQl,该如何解决
  详细解决方案

求一大数据量SQl,该如何解决

热度:289   发布时间:2016-04-24 08:05:57.0
求一大数据量SQl
 table1  主表
  id   name         b1_id    b2_id   b3_id  b4_id

 1      a                 id1         id2       id3        id4

其中tableq  后四列 可能全有值,也可能只有其中某列有值


table2       
   id    name
   id1   name1
   id2    name2
   id3    name3
  id3    name4


现在根据 table2 表的  一个或多个Name 模糊查询table1  并把table的后四列转成name 

 table1  主表
  id   name         b1_id    b2_id   b3_id  b4_id

 1      a                 name1         name2       name3        name4


数据量大 ,不好用IN   求各位高手
------解决思路----------------------
引用:
 table1  主表
  id   name         b1_id    b2_id   b3_id  b4_id

 1      a                 id1         id2       id3        id4

其中tableq  后四列 可能全有值,也可能只有其中某列有值


table2       
   id    name
   id1   name1
   id2    name2
   id3    name3
  id3    name4


现在根据 table2 表的  一个或多个Name 模糊查询table1  并把table的后四列转成name 

 table1  主表
  id   name         b1_id    b2_id   b3_id  b4_id

 1      a                 name1         name2       name3        name4


数据量大 ,不好用IN   求各位高手

SELECT T.ID,
       T.NAME,
       (SELECT T1.NAME FROM TABLE2 T1 WHERE T1.ID = T.B1_ID) B1_ID,
       (SELECT T1.NAME FROM TABLE2 T1 WHERE T1.ID = T.B2_ID) B2_ID,
       (SELECT T1.NAME FROM TABLE2 T1 WHERE T1.ID = T.B3_ID) B3_ID,
       (SELECT T1.NAME FROM TABLE2 T1 WHERE T1.ID = T.B4_ID) B4_ID
  FROM TABLE1 T

------解决思路----------------------
引用:
 table1  主表
  id   name         b1_id    b2_id   b3_id  b4_id

 1      a                 id1         id2       id3        id4

其中tableq  后四列 可能全有值,也可能只有其中某列有值


table2       
   id    name
   id1   name1
   id2    name2
   id3    name3
  id3    name4


现在根据 table2 表的  一个或多个Name 模糊查询table1  并把table的后四列转成name 

 table1  主表
  id   name         b1_id    b2_id   b3_id  b4_id

 1      a                 name1         name2       name3        name4


数据量大 ,不好用IN   求各位高手


WITH table1 AS(
SELECT '1' ID,'a' NAME,'id1' b1_id,'id2' b2_id,'id3' b3_id,'id4' b4_id FROM dual),
table2 AS(
SELECT 'id1' ID,'name1' NAME FROM dual UNION ALL
SELECT 'id2' ID,'name2' NAME FROM dual UNION ALL
SELECT 'id3' ID,'name3' NAME FROM dual UNION ALL
SELECT 'id4' ID,'name4' NAME FROM dual
)
SELECT t1.ID,t2.NAME b1_id,t3.NAME b2_id,t4.NAME b3_id,t5.NAME b4_id
  FROM TABLE1 T1, TABLE2 T2, TABLE2 T3, TABLE2 T4, TABLE2 T5
 WHERE T1.B1_ID = T2.ID(+)
   AND T1.B2_ID = T3.ID(+)
   AND T1.B3_ID = T4.ID(+)
   AND T1.B4_ID = T5.ID(+)
  相关解决方案