zoukankan      html  css  js  c++  java
  • Oracle两表关联,只取B表的第一条记录

    背景:

       A表、B表两表关联,关联出来的结果里B表有不止一条,需求是只要B表结果中的某一条(按某字段排序)

      首先想到了直接写个带排序的子查询去匹配外围的值,从这个结果集中只要第一条,但是经过验证发现,里边的条件是获取不到外层的值的,因此此方案不可行。

      经过百度,发现 row_number() over函数可用,以下是数据环境及结果。

      创建数据环境

    create table A(ANAME varchar(20));
    insert into A values('alan');
    insert into A values('Alee');
    insert into A values('aspn');
    
     
    create table B
    (
    BNo varchar(10),
    BTell varchar(20),
    Name varchar(20)
    );
    insert into B values('NO1','1366666','alan');
    insert into B values('NO1','1388888','alan');
    insert into B values('NO1','1399999','alan');
    insert into B values('NO2','1333333','Alee');
    insert into B values('NO3','1311111','aspn');
    insert into B values('NO3','1322222','aspn');

    直接关联查询的话,结果如下

    需求是只要每个人的第一条记录(按BTELL排序)

    select *
      from a
      left join (select *
                   from (select b. *,
                                (row_number()
                                 over(partition by bno order by BTell desc)) px
                           from b) e
                  where px = 1) t
        on a.aname = t.name;

    查询结果如下

    问题解决

  • 相关阅读:
    POJ 2065 高斯消元求解问题
    HDU1045-Fire Net
    HDU1863-畅通工程
    POJ2524-Ubiquitous Religions
    POJ1064-Cable master
    POJ2456-Aggressive cows
    HDU1272-小希迷宫
    POJ1611-The Suspects
    HDU4496-D-City
    HDU1232-畅通工程
  • 原文地址:https://www.cnblogs.com/luxd/p/8527457.html
Copyright © 2011-2022 走看看