首页 > 解决方案 > 为什么此语句将表和虚拟表中的 RowID 联合起来?

问题描述

我正在努力将应用程序从 Camel 和 myBatis 提升到 Spring boot 和 Jooq。

有一个非常奇怪的 sql 语句嵌套在我们应用程序的合并语句的 using 函数中。我不明白这个声明的目的,写它的人已经不在公司了。

在 Merge 的 using 部分内部,它实际上就像

Select A, B, C, D FROM (
    Select ROWID as RID, A, B, C, D FROM TableA TA WHERE A = var
    UNION ALL
    Select ROWID, null, null, null, null FROM dual
WHERE ROWID >= 1 

ROWID 没有在任何匹配语句中使用,所以它在这里的原因对我来说毫无意义。虽然我对合并语句一开始并不了解。

编辑:Using's On 条件是匹配确保 A 等于 var,因为 var 是通过触发 sql 的函数发送的变量。基本上它只是ON A = var

标签: sqloracleoracle11g

解决方案


可能是作者想要保证查询将返回至少一行。(或恰好一排)

如果

Select ROWID as RID, A, B, C, D FROM TableA TA WHERE A = var

不返回任何内容(零行,没有找到任何内容),然后UNION ALL将附加 NULL 行并将其返回。

我对甲骨文不熟悉,所以我不确定WHERE ROWID >= 1能取得什么成就。也许是为了保证结果集总是只有一行。


推荐阅读