我有这张桌子
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] 删除。
我来说两句