如何只选择第一行?

洛基

我有这张桌子

Table_A

  link    name
  1       toto 
  2       lulu

Table_B

  link    action   date
  1       OK       01/02/2010 
  1       OK       01/02/2022
  1       OK       01/03/2021
  1       OK       01/02/2025

然后我想做查询

Select 
  * 
from 
  Table_A, Table_B 
where
  table_A.link (+)= table_b.link and
  table_b.action (+)= 'OK' 

问题是此查询返回重复项

link    name    action    date
1       toto    OK        01/02/2010 
1       toto    OK        01/02/2022
1       toto    OK        01/03/2021
1       toto    OK        01/02/2025
2       lulu

而且我要 :

link    name    action    date
1       toto    OK        01/02/2025
2       lulu

怎么做 ?

数学家

通常最好使用ANSI连接语法,但是在您带领下,我将使用Oracle语法(对于外部连接使用“加”运算符)。

首先,请注意,该WHERE子句中第一个条件的“ +”在错误的一侧您需要将“虚拟”行添加到table_B而不是添加table_A

然后,如果只依赖一个表,通常最好先进行聚合。这是我在FROM下面子句中的子查询中所做的

另外,date它是Oracle关键字,不应用作列名。我希望您不要那样使用它。对于我的代码,我假设列名称为dt

select a.link, a.name, b.action, b.dt
from   table_a a,
       ( select link, 'OK' action, max(dt) dt
         from   table_b
         where  action = 'OK'
         group  by link
       ) b
where  b.link (+) = a.link
;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章