在Oracle中,限制在左外部联接中获取的行数



我将在oracle融合应用程序中创建一个数据模型。我需要基于查询中的两个表创建列End_date。所以我用了两种方法。

  1. 使用子查询:
SELECT *
FROM (SELECT projects_A.end_date
FROM projects_A, projects_B
WHERE projects_A.p_id = projects_B.p_id
AND rownum = 1)
  1. 使用LEFT OUTER JOIN
SELECT projects_A.end_date
FROM projects_A
LEFT JOIN projects_B
ON projects_A.p_id = projects_B.p_id
WHERE rownum = 1

在这里,当我使用子查询时,查询会按预期返回结果。但是当我对WHERE rownum = 1使用左外联接时,结果为零。在没有WHERE rownum = 1的情况下,它检索所有结果。但我只想要第一个结果。那么,我如何使用左外部联接来实现这一点呢?非常感谢。

看起来您想要带一个非空的end_date值(因此,添加NULLS LAST(,但排序顺序尚未确定(根据这一事实,您可以在ORDER BY子句的末尾添加DESC(,并使用FETCH子句(DB版本为12c+,从注释中可以理解(和ONLY选项来排除关系,因为您只想带一行。

因此,您可以使用以下查询:

SELECT A.end_date
FROM projects_A A
LEFT JOIN projects_B B
ON A.p_id = B.p_id
ORDER BY end_date NULLS LAST
FETCH FIRST 1 ROW ONLY 

最新更新