2012-11-06 144 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;