0
votes

Oracle SQL - Script Suns extrêmement lent lorsque vous incluez une sous-requête dans une déclaration

Table: Nombre

With Number as (
    select  B,count(B) as count
    from  Number
    where 1=1
    group by B
)
, Number2 As (
    select B
    from Number 
    where count>1
, Data As (
    select * from Data where B in (select * from Number2)
)


0 commentaires

3 Réponses :


0
votes

Vous pouvez utiliser groupe par et ayant la clause comme suit: xxx

index sur la colonne B dans les deux la table vous aidera à réduire le coût de la requête.


0 commentaires

1
votes

Que diriez-vous de rejoindre? Les lignes n ° 1 - 15 représentent des données d'échantillonnage (vous ne tapez pas cela); La requête que vous avez besoin commence à la ligne n ° 16.

SQL> with
  2  tnumber (a, b) as
  3    (select 12, 34 from dual union all
  4     select 22, 34 from dual union all
  5     select 11, 35 from dual union all
  6     select 13, 36 from dual
  7    ),
  8  tdata (b, c, d) as
  9    (select 34, 'a', 'b' from dual union all
 10     select 34, 'c', 'd' from dual union all
 11     select 35, 'e', 'f' from dual union all
 12     select 35, 'g', 'h' from dual union all
 13     select 36, 'i', 'j' from dual union all
 14     select 36, 'k', 'l' from dual
 15    )
 16  select d.*
 17  from tdata d join (select n.b
 18                     from tnumber n
 19                     group by n.b
 20                     having count(*) > 1
 21                    ) x
 22                 on d.b = x.b;

         B C D
---------- - -
        34 a b
        34 c d

SQL>


0 commentaires

0
votes

Essayez:

SELECT D.* FROM(SELECT B FROM Number GROUP BY B HAVING COUNT(B) > 1)TEMP
JOIN DATA D ON D.B = TEMP.B


0 commentaires