我正在努力将Camel和myBatis的应用程序升级到Spring boot和Jooq。
在我们的应用程序的merge语句的using函数中嵌套了一个非常奇怪的sql语句。我不明白此声明的目的,无论写谁的人都不再在公司任职。
在合并的使用部分内,它实际上就像
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
在所有match语句中均未使用ROWID,因此对我而言根本没有意义。尽管我对合并语句一无所知。
编辑:Using's On条件是为了确保A等于var,因为var是通过触发sql的函数发送的变量。基本上只是ON A = var
答案 0 :(得分:0)
在最后一行中使用RowID。 (WHERE ROWID> = 1)。
为了使UNION ALL正常工作,列数必须相同。
对于您的问题,它取决于获取查询后的程序逻辑。既然我们在这里可以看到两个表是合并的。
例如,TableA的ROWID为1,2,3,而“双”表的ROWID为1,2,3。结果(合并表)将显示1,1,2,2,3,3。
了解程序处理结果的重要性更重要,因为您可以找出为什么旧语句执行UNION ALL的原因。
答案 1 :(得分:0)
作者可能想保证查询将至少返回一行。 (或恰好是一行)
如果
Select ROWID as RID, A, B, C, D FROM TableA TA WHERE A = var
不返回任何内容(零行,未找到任何内容),然后UNION ALL
将附加NULL行并将其返回。
我对Oracle不熟悉,因此我不确定WHERE ROWID >= 1
的成就。
也许是为了保证结果集始终只有一行。