如何只选择满足条件的第一行?

Jor*_*hez 5 sql oracle select join group-by

我正在两个表之间进行连接并添加一个条件,只想获得满足连接条件的第一行和"extern"条件.

此查询例如:

select * from PRMPROFILE p, user v
where 
p.id = v.profile
and p.language = 0
and v.userid like '%TEST%';
Run Code Online (Sandbox Code Playgroud)

首先,我想知道如何使用配置文件(v.profile或p.id)对此内连接的结果进行分组.之后如何只显示每个组的第一个外观.

提前致谢.

Ale*_*ole 6

您可以使用分析查询:

select *
from (
    select p.*, v.*,
        row_number() over (partition by p.id order by v.userid) as rn
    from prmprofile p
    join user v on v.profile = p.id
    where p.language = 0
    and v.userid like '%TEST%'
)
where rn = 1;
Run Code Online (Sandbox Code Playgroud)

内部查询获取所有数据(但使用*不理想),并添加一个额外的列,在每个p.id值之间分配行号序列.它们必须按某种顺序排序,而你还没有说出是什么使得某一行成为"第一",所以我猜对了用户ID - 你当然可以将其更改为更合适的行,这将在查询重新运行.(您可以查看rankdense_rank选择其他方法来选择"第一行").

外部查询只是将结果集限制为额外列具有值的结果集1,这将为每个列提供一行p.id.

另一种方法是使用子查询来标识"第一"行并加入到该行,但不清楚标准是什么以及它是否足够有选择性.