2012-03-13 44 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可以选择加入该列的例子作为你从其他表中选择的表。