2013-11-24 40 views
1

這可能已經被回答,但我找不到任何東西。使用第三個鏈接關聯第一個表中的一個條目的第二個表的第二個表

在我的Oracle數據庫我有兩個表

S_PIPE_N

G3E_ID |G3E_FID 
380  | 1181024 
2064 | 1188176 

S_PCONPT_N

G3E_ID| G3E_FID| BOTTOM_HEIGHT 
783 | 1181025| 253.4 
4173 | 1188175| 364.51 
4174 | 1188178| 366.76 
17106 | 1379384| 253.11 

和表是連接這兩

S_MANY_PCP_N

G3E_ID | G3E_FID | G3E_OWNERFID |G3E_CID 
2539 | 1181025 | 1181024  |1 
68507 | 1379384 | 1181024  |2 
15444 | 1188178 | 1188176  |1 
15448 | 1188175 | 1188176  |2 

我希望得到儘可能select語句的結果如下:

C.g3e_fid | A.bottom_height_1 | D.bottom_height_2 
1181024 | 253.4    | 253.11 
1188176 | 366.76   | 364.51 

我用下面的語句試了一下:

select C.G3E_FID, A.BOTTOM_HEIGHT AS "bottom_height_1", D.BOTTOM_HEIGHT "bottom_height_2" FROM S_PIPE_N C, S_MANY_PCP_N B LEFT OUTER JOIN S_PCONPT_N A ON A.G3E_FID=B.G3E_FID AND B.G3E_CID=1 LEFT OUTER JOIN S_PCONPT_N D ON A.G3E_FID=D.G3E_FID AND B.G3E_CID=2 WHERE C.G3E_FID=B.G3E_OWNERFID

雖然這樣,我得到如下:

C.g3e_fid | A.bottom_height_1 | D.bottom_height_2 
1181024 | 253.4    | null 
1181024 |null | 253.11 
1188176 | 366.76   | null 
1188176 | null   | 364.51 

如何更改我得到的聲明每g3e_fid

回答

1
SELECT A.G3E_FID, 
     MAX (CASE WHEN B.G3E_CID = 1 THEN C.BOTTOM_HEIGHT END), 
     MAX (CASE WHEN B.G3E_CID = 2 THEN C.BOTTOM_HEIGHT END) 
    FROM S_PIPE_N a 
     INNER JOIN S_MANY_PCP_N b 
      ON A.G3E_FID = B.G3E_OWNERFID 
     LEFT OUTER JOIN S_PCONPT_N c 
      ON B.G3E_FID = C.G3E_FID 
GROUP BY A.G3E_FID; 
+0

Ramblin'Man謝謝你,這個作品! – mistral52

1

只是一個結果,這應該工作

select C.G3E_FID, A.BOTTOM_HEIGHT AS "bottom_height_1", D.BOTTOM_HEIGHT 
"b.bottom_height_2" FROM S_PIPE_N C, S_MANY_PCP_N B 
LEFT OUTER JOIN S_PCONPT_N A ON 
A.G3E_FID=C.G3E_FID AND G3E_CID=1 L 
LEFT OUTER JOIN S_PCONPT_N D ON A.G3E_FID=C.G3E_FID AND 
G3E_CID=2 WHERE C.G3E_FID=B.G3E_OWNERFID and A.BOTTOM_HEIGHT IS NOT NUL 
+0

Dhaval,謝謝你的回答,但它並沒有解決它。我現在有: G3E_FID | bottom_height_1 | bottom_height_2 1181024 | 253.4 |空 1188176 | 366.76 | NUL – mistral52

1

試試這個:

SELECT T1.G3E_FID,T1.BOTTOM_HEIGHT AS 'bottom_height_1' , T2.BOTTOM_HEIGHT as 'bottom_height_2' 
FROM 
(select C.G3E_FID,A.BOTTOM_HEIGHT 
FROM S_PIPE_N C, S_MANY_PCP_N B 
LEFT OUTER JOIN S_PCONPT_N A ON A.G3E_FID=B.G3E_FID 
WHERE C.G3E_FID=B.G3E_OWNERFID AND B.G3E_CID=1) T1 
FULL JOIN 
(SELECT C.G3E_FID,D.BOTTOM_HEIGHT 
FROM S_PIPE_N C, S_MANY_PCP_N B 
LEFT OUTER JOIN S_PCONPT_N D ON B.G3E_FID=D.G3E_FID 
WHERE C.G3E_FID=B.G3E_OWNERFID AND B.G3E_CID=2)T2 
ON T1.G3E_FID = T2.G3E_FID 
+0

謝謝迪普希卡,恐怕這是行不通的。 (模糊性錯誤)但是我從Ramblin'Man的工作中得到了一個解決方案。 – mistral52

相關問題