2012-11-06 47 views
0

我有查询,我有以下表关于查询DB2

select * from PRODGP_STRUCTURE 
select * from PRODGP_STR_LINK 
select * from PRODUCT_GROUP 
select * from PROD_PGRP_LINK 
select * from PRODUCT 

的关系之间的关系如下...

select pstr.PSTR_NAME, PG.PRGP_NAME, PRD.PROD_NAME 
from prodgp_structure pstr 
JOIN PRODGP_STR_LINK pgstrlnk 
    ON pgstrlnk.PSTR_ID = pstr.PSTR_ID 
JOIN PRODUCT_GROUP pg 
    ON pgstrlnk.PRGP_CHILD_ID = PG.PRGP_ID 
JOIN PROD_PGRP_LINK prdprdgp 
    ON prdprdgp.PRGP_ID = pg.PRGP_ID 
JOIN product prd 
    ON prdprdgp.PROD_ID = prd.PROD_ID; 

我想出了以下查询,

select * from PRODGP_STRUCTURE where pstr_id in 
(select pstr_id from PRODGP_STR_LINK where PRGP_CHILD_ID in 
(select prgp_id from PRODUCT_GROUP where PRGP_ID in (select PRGP_ID from PROD_PGRP_LINK where PROD_ID in (select PROD_ID from product where PROD_ID=2)))) 

请让我知道是否有任何其他方式来写这个查询..!

回答

0

内连接你的表连接在一起,然后你只需要通过PROD_ID过滤

SELECT pstr.PSTR_NAME, PG.PRGP_NAME, PRD.PROD_NAME 
FROM prodgp_structure pstr 
INNER JOIN PRODGP_STR_LINK pgstrlnk 
    ON pgstrlnk.PSTR_ID = pstr.PSTR_ID 
INNER JOIN PRODUCT_GROUP pg 
    ON pgstrlnk.PRGP_CHILD_ID = PG.PRGP_ID 
INNER JOIN PROD_PGRP_LINK prdprdgp 
    ON prdprdgp.PRGP_ID = pg.PRGP_ID 
INNER JOIN product prd 
    ON prdprdgp.PROD_ID = prd.PROD_ID 
WHERE prd.PROD_ID = 2;