我将在oracle融合应用程序中创建一个数据模型。我需要基于查询中的两个表创建列End_date
。所以我用了两种方法。
- 使用子查询:
SELECT *
FROM (SELECT projects_A.end_date
FROM projects_A, projects_B
WHERE projects_A.p_id = projects_B.p_id
AND rownum = 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