Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JdbcPagingItemReader在DB2 SortKey的内部联接SQL中出现表名别名问题_Java_Spring Batch - Fatal编程技术网

Java JdbcPagingItemReader在DB2 SortKey的内部联接SQL中出现表名别名问题

Java JdbcPagingItemReader在DB2 SortKey的内部联接SQL中出现表名别名问题,java,spring-batch,Java,Spring Batch,我正在尝试为内部联接SQL编写JdbcPagingItemReader 数据库是DB2 SQL在两个表上进行内部联接,因此使用表名别名联接列名。两个表中都有SORT_KEY列 QueryProvider在我的查询中添加了这两项内容,用于第1页以后的查询,即不是第一页,而是第二页 1.1在WHERE子句中对_KEY>进行排序 2.按排序键ASC排序 在设置排序键列时 1.如果我没有指定表别名,我会在-203上面的point1的WHERE子句中得到这个SQL错误。对列名的引用是不明确的 2.如果我在

我正在尝试为内部联接SQL编写JdbcPagingItemReader

数据库是DB2

SQL在两个表上进行内部联接,因此使用表名别名联接列名。两个表中都有SORT_KEY列

QueryProvider在我的查询中添加了这两项内容,用于第1页以后的查询,即不是第一页,而是第二页

1.1在WHERE子句中对_KEY>进行排序

2.按排序键ASC排序

在设置排序键列时

1.如果我没有指定表别名,我会在-203上面的point1的WHERE子句中得到这个SQL错误。对列名的引用是不明确的

2.如果我在queryProviderBean.setSortKey中为排序键列指定了表别名,则在上面第2点的ORDER BY子句中会出现错误,即列名不存在

这个问题似乎是重复的

那篇文章提到了一个黑客,但没有修复

我不知道如何解决这个问题?通过添加自定义查询提供程序还是通过组织SQL本身

我使用的是SpringBatch版本3.0.7

我真的需要使用JdbcPagingItemReader,因为我不能一次性读取整个数据,而且我只有一个表列,它是页面排序的候选列,并且该列存在于两个连接的表中

第一页查询工作正常,其唯一剩余的页查询产生问题。查询如下:

SELECT ta.SORT_KEY FROM A ta INNER JOIN B tb ON ta.SORT_KEY=tb.SORT_KEY WHERE ta.COLUMN_A=? 

如上所述,queryProviderBean.SetPortKeySort_键和queryProviderBean.SetPortKeyTA.SORT_键都失败

可以尝试将查询包装到子查询中吗?例如:从SELECT ta中选择SORT_KEY。从ta内部连接中选择SORT_KEY。在ta上连接B tb。SORT_KEY=tb.SORT_KEY mysubquery。这样就不会有任何歧义,您可以使用queryProviderBean.setSortKeySORT_KEY命令实际上,我给出了一个简单的示例。我也有一个WHERE-after内部连接,如果没有它,内部查询将返回大量数据。批处理查询提供程序需要分别使用selectClause、fromClause和whereClause,我没有办法将它们放在包含内部查询的selectClause中的WHERE中。我已经更新了相关的查询以使其更清晰。好的,那么包装B表并重命名SORT_键怎么样?从ta内部连接中选择ta.SORT\u KEY,从ta上的B tb中选择SORT\u KEY作为SORT\u KEY\B。SORT\u KEY=tb.SORT\u KEY\B在db2提示符下工作,让我将其放入java程序中。谢谢!!内部查询从B tb中选择SORT_KEY作为SORT_KEY会不会影响程序的内存使用,因为我想我正在内存中加载完整的表?顺便说一句,语法在Spring批处理中起作用。您可以尝试将查询包装到子查询中吗?例如:从SELECT ta中选择SORT_KEY。从ta内部连接中选择SORT_KEY。在ta上连接B tb。SORT_KEY=tb.SORT_KEY mysubquery。这样就不会有任何歧义,您可以使用queryProviderBean.setSortKeySORT_KEY命令实际上,我给出了一个简单的示例。我也有一个WHERE-after内部连接,如果没有它,内部查询将返回大量数据。批处理查询提供程序需要分别使用selectClause、fromClause和whereClause,我没有办法将它们放在包含内部查询的selectClause中的WHERE中。我已经更新了相关的查询以使其更清晰。好的,那么包装B表并重命名SORT_键怎么样?从ta内部连接中选择ta.SORT\u KEY,从ta上的B tb中选择SORT\u KEY作为SORT\u KEY\B。SORT\u KEY=tb.SORT\u KEY\B在db2提示符下工作,让我将其放入java程序中。谢谢!!内部查询从B tb中选择SORT_KEY作为SORT_KEY会不会影响程序的内存使用,因为我想我正在内存中加载完整的表?顺便说一下,语法在Spring批处理中起作用。