I want to return the name, which has not the con_id nr 2 and has more objects (count(*)) than in con_id nr 2.
My statement isnt working because of the count.. can someone help me pls
Select v.name
From CDB_objects c, v$containers v, CDB_objects c2
Where object_type like '%JAVA%'
And c.con_id = v.con_id
And owner not in ('MDSYS', 'OJVMSYS')
And c.con_id != 2
And c.count(*) < c2.count(*)
Group by v.name;
the return statement without the compare looks like this
OWNER STATUS CNT NAME -------------------- -------- ------ --------------- SYS VALID 37337 CDB$ROOT SYS VALID 37451 PDB1 SYS VALID 37339 PDB2 SYS VALID 37338 PDB3
Advertisement
Answer
WHERE clause is applied before GROUP BY. What you’re looking for is HAVING
Also you don’t have any join condition with c2, and those expressions: c.count(*), c2.count(*) are not syntactically correct.
Anyway I think you need a simple query like this
select v.name
from cdb_objects c, v$containers v
where object_type like '%JAVA%'
and c.con_id = v.con_id
and owner not in ('MDSYS', 'OJVMSYS')
and c.con_id != 2
group by v.name
having count(*) < (select count(*) from cdb_objects c2 where c2.con_id = 2)