| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.misc -> NOT IN, SQL, Optimisation
Hi,
I worked quite a bit to find out a SQL sentence to look for some specific records in my database. I was quite surprise by the way NOT IN is working. However I have found something which work.... however it is very long....
Here enclose the schema of my tables, the working SQL and a brief description of what I am trying to do....
If somebody have an idea?
Thanks Very Much
François
PS: I tried some programs to optimise automatically the SQL but after a couple of hours... it is still running)....
I got three tables: GP_PACKAGE, GP_PRODUCT, GP_ELEMENT... and simply I got packages which are composed of products and the n-n relation is store in the element table.... What I am trying to do is to find the packages which are composed of the same products of the selected package....
(SELECT pkg_id2
FROM (SELECT pkg_id1, pkg_id2, COUNT (*) counter
FROM ((SELECT gp_product1.pdt_cisco_id,
gp_package2.pkg_id pkg_id2,
gp_package1.pkg_id pkg_id1
FROM gp_element gp_element1,
gp_package gp_package1,
gp_package gp_package2,
gp_product gp_product1
WHERE gp_product1.pdt_id =
gp_element1.elt_pdt_id
AND gp_package1.pkg_id =
gp_element1.elt_pkg_id
AND gp_product1.pdt_cisco_id NOT IN
(SELECT gp_product2.pdt_cisco_id
FROM gp_product gp_product2,
gp_element gp_element2
WHERE gp_element2.elt_pdt_id =
gp_product2.pdt_id
AND gp_element2.elt_pkg_id =
gp_package2.pkg_id))
UNION
(SELECT gp_product2.pdt_cisco_id,
gp_package2.pkg_id pkg_id2,
gp_package1.pkg_id pkg_id1
FROM gp_element gp_element2,
gp_package gp_package2,
gp_package gp_package1,
gp_product gp_product2
WHERE gp_product2.pdt_id =
gp_element2.elt_pdt_id
AND gp_element2.elt_pkg_id =
gp_package2.pkg_id
AND gp_product2.pdt_cisco_id NOT IN
(SELECT gp_product1.pdt_cisco_id
FROM gp_product gp_product1,
gp_element gp_element1
WHERE gp_element1.elt_pdt_id =
gp_product1.pdt_id
AND gp_element1.elt_pkg_id =
gp_package1.pkg_id)))
WHERE pkg_id1 = 121
GROUP BY pkg_id1, pkg_id2
HAVING COUNT (*) != 0));
PKG_ID NUMBER(20) not null,
PKG_SIRIS_ID VARCHAR2(20) not null,
PKG_VERSION NUMBER(20) not null,
PKG_STA_ID NUMBER(20) not null,
constraint PK_GP_PACKAGE primary key (PKG_ID)
using index
tablespace GP_INDEX01
-- ============================================================-- Table : GP_PRODUCT
-- ============================================================create table GP_PRODUCT
PDT_ID NUMBER(20) not null,
PDT_CAT_ID NUMBER(20) not null,
PDT_CISCO_ID VARCHAR2(100) not null,
constraint PK_GP_PRODUCT primary key (PDT_ID)
using index
tablespace GP_INDEX01
-- ============================================================-- Table : GP_ELEMENT
-- ============================================================create table GP_ELEMENT
ELT_PDT_ID NUMBER(20) not null,
ELT_PKG_ID NUMBER(20) not null,
ELT_TYP_ID NUMBER(20) not null,
constraint PK_GP_ELEMENT primary key (ELT_PDT_ID, ELT_PKG_ID,
ELT_TYP_ID)
using index
tablespace GP_INDEX01
![]() |
![]() |