2012-03-13 46 views
0

我設計一個查詢有一個問題:選擇少的列表

  1. 我要選擇基於標準的一些記錄

    (SELECT COL_1, COL_2,COL_3 FROM TABLE_1 WHERE COL_3 = 'CND') 
    
  2. 現在我需要從兩個數據庫中選擇記錄基於這些結果

    (SELECT XX_1, XX_2 
    FROM TABLE_2 WHERE TABLE_2.XX1 = TABLE_1.COL1 
    (from filtered results in step 1) 
    
  3. (SELECT YY_1, YY_2, YY_3 
    FROM TABLE_3 WHERE TABLE_3.YY_2 = TABLE_1.COL2) 
    (from filtered results in step 1) 
    
  4. 我需要在單個表查看結果

    XX_1, XX_2, YY_1, YY_2, YY_3 
    

提到列必須等於在結果只有具備這樣的平等紀錄將被取回。

我需要上百萬的記錄本上運行,所以性能被認爲是

這會在Java類中使用,所以請不要認爲我不能因爲執行任何數據庫特定/ SQL命令除讀取之外,我不擁有任何數據庫權限。

希望我清楚。如果沒有,我會解釋疑惑。

我想是這樣的

SELECT * 
FROM TABLE_2 
JOIN 
(SELECT COL_1, 
    COL_2, 
    COL_3 
FROM TABLE_1 
WHERE COL_3 = 'CND' 
GROUP BY COL_1) TMP_TABLE 
ON (TMP_TABLE.COL_1 = TABLE2.XX_1) 

但我得到視圖/表不存在 - Oracle錯誤。

+1

你應該閱讀http://en.wikipedia.org/wiki/Join_(SQL) – YXD 2012-03-13 11:13:11

回答

1

我認爲你需要使用子查詢,就這樣

select col_1,col_2 

from(

    select col_1,col_2 

    from (

    select col_1,col_2 from table_1 

)tbl1 

    left join table_2 tbl2 on tbl2.col_1 = tbl1.col_1 

)tbl3 

left join table_3 tbl3 on tbl4.col_1 = tbl3.col_1 
+0

我仍然越來越表或視圖不存在 – 2012-03-13 11:29:21

+0

謝謝它的工作。我做了一個愚蠢的錯字錯誤,導致我查看錯誤。 – 2012-03-13 12:08:54

+0

沒有probs,你的歡迎,不要忘記檢查 – 2012-03-13 12:10:33

0
with usedrows as 
(select a.Col_1,a.Col_2 FROM table1 a left JOIN table2 b ON a.Col_1=b.Col_2) 
select Col_1,C0l_2 from usedrows 

這只是其中usedrows是一個虛擬表作出後join.and U可以選擇加入該列的例子作爲你從其他表中選擇的表。