PL-SQL - 一对多关系左连接中的第一条记录

伊戈尔·伊万诺夫

我正在尝试在 Oracle 中使用 LEFT JOIN 连接两个表。我只需要包含“正确”连接表中的第一条记录。

请参阅以下示例:

表A

code | emp_no

101  | 11111
102  | 22222
103  | 33333
104  | 44444
105  | 55555

表B

code | city       | county

101  | City1      | Country1
101  | City2      | Country1
101  | City3      | Country1
102  | City4      | Country2
103  | City5      | Country3

预期输出:

code | emp_no | city      | county

101  | 11111  | City1     | Country1
102  | 22222  | City4     | Country2
103  | 33333  | City5     | Country3
104  | 44444  | NULL      | NULL
105  | 55555  | NULL      | NULL

我需要从表 B 中选择第一个匹配的记录并忽略所有其他行。

上面的查询假设有效:

SELECT *
FROM TABLE_A a
   LEFT JOIN TABLE_B b ON b.CODE = a.CODE
      AND b.CODE = 
      (
         SELECT CODE
         FROM TABLE_B
         WHERE ROWNUM = 1
      )

但我收到错误:ORA-01799: a column may not be external-joined to a subquery

我怎样才能做到这一点?

谢谢

亚历克斯·普尔

您可以使用min()aggrenate函数keep (dense_rank first ...)语法来从外连接表“第一个”匹配的数据:

select a.code, a.emp_no,
  min(b.city) keep (dense_rank first order by city, county) as city,
  min(b.county) keep (dense_rank first order by city, county) as county
from table_a a
left join table_b b on b.code = a.code
group by a.code, a.emp_no
order by a.code, a.emp_no;

      CODE     EMP_NO CITY  COUNTY  
---------- ---------- ----- --------
       101      11111 City1 Country1
       102      22222 City4 Country2
       103      33333 City5 Country3
       104      44444               
       105      55555               

不过,您必须定义“第一”的含义 - 我已经city, county在 keep 子句中使用 order by ,但是您可能还有另一列您没有显示应该指示顺序。

(您可以按 null 排序以使其有点随意,但这通常不是一个好主意,尤其是因为稍后运行相同的查询可能会为相同的数据提供不同的结果。)

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从一组记录中获取第一条记录 MS sql

来自分类Dev

SQL查询获取第一条记录

来自分类Dev

SQL:连接两个表以查找子集中的第一条匹配记录

来自分类Dev

在sql中记录每个客户的第一条记录

来自分类Dev

如何在SQL中向后运行UPDATE命令(从最后一条记录到第一条)?

来自分类Dev

SQL Server-从组中获取第一条记录

来自分类Dev

如何在Oracle SQL中检索相同日期的组中的第一条记录和最后一条记录

来自分类Dev

Oracle SQL从有序数据集中获取第一条记录和最后一条记录

来自分类Dev

PL / SQL中的递归

来自分类Dev

SQL INSERT奇怪地跳过了第一条记录

来自分类Dev

SQL:执行计算并确保每个id的第一条记录为空值

来自分类Dev

需要基于最早日期的第一条记录-SQL Server 2012

来自分类Dev

快速SQL查询以与集合的第一条记录联接

来自分类Dev

如何编写 SQL 查询以使用 IN 子句获取第一条记录(最新)?

来自分类Dev

SQL触发器只影响第一条记录

来自分类Dev

如何从MS Access / SQL中的第一条记录开始获取一列中每三个记录的平均值?

来自分类Dev

PL / SQL记录属性条件

来自分类Dev

SQL:为什么“CREATE VIEW”必须是查询批处理中的第一条语句?

来自分类Dev

PL / SQL中的嵌套游标

来自分类Dev

在PL / SQL中更新多行

来自分类Dev

PL-SQL中的WITH子句

来自分类Dev

在PL / SQL中触发视图

来自分类Dev

在PL / SQL中更新多行

来自分类Dev

PL/SQL 中的“被使用”查询?

来自分类Dev

一对多关系左连接的带聚合函数的 SQL 查询

来自分类Dev

PL / SQL约束:表中总是一个记录

来自分类Dev

SQL一对多关系

来自分类Dev

SQL一对多关系

来自分类Dev

T-SQL在第一条记录匹配内联查询计算条件后停止

Related 相关文章

热门标签

归档