获取从结果中获取第一个匹配项

时间:2010-07-09 06:55:53

标签: sql oracle join

我有一个oracle sql查询

select
    distinct 
    tab1.col1,
    tab2.col1
from 
    table1 tab1 
    join table2 tab2 on tab1.col1 = tab2.col1

在这里,我得到了与不同价值观相同的预期。

For Example : The result rows are

1  2 
3  4
5  6

现在我想为table3添加一个连接。所以我的sql是

select
    distinct 
    tab1.col1,
    tab2.col1,
    tab3.col1
from 
    table1 tab1 
    join table2 tab2 on tab1.col1 = tab2.col1
    join table3 tab3 on tab1.col1 = tab3.col1

问题在于表3返回的是多个值。 这导致基于table3的重复行。

For Example : The result rows are
1  2  4 
1  2  5 
3  4  1
3  4  2
5  6  3

(此处如果您注意到第1行和第2行是重复的,3& 4是重复的)

我想要做的是加入table3我想要获取 第一次出现的行。

2 个答案:

答案 0 :(得分:4)

这对你有用!

select 
    distinct  
    tab1.col1, 
    tab2.col1, 
    MIN(tab3.col1)
from  
    table1 tab1  
    join table2 tab2 on tab1.col1 = tab2.col1 
    join table3 tab3 on tab1.col1 = tab3.col1 
GROUP BY tab1.col1, tab2.col1

编辑:思考,

我假设第3列是一个不断增加的整数,在这种情况下这是有效的。您可以使用日期列准确定义聚合,以获得“第一次出现行”。

答案 1 :(得分:1)

select
    distinct 
    tab1.col1,
    tab2.col1,
    t3.col1
from 
    table1 tab1 
    join table2 tab2 on tab1.col1 = tab2.col1
    join (select distinct col1 from table3) t3 on tab1.col1 = t3.col1