1

我想在 MSSQL 2005 中使用带有 JTDS 的 Java 执行以下语句。我需要这样,因为我想显示位置 1-15、16-30 等的结果。

SELECT TOP 15 WID,AID,de FROM 
(SELECT WID,AID, de, ROW_NUMBER() OVER (ORDER BY WID ASC) AS r_n_n 
FROM [database].[dbo].[table1], [database].[dbo].[table2] 
WHERE AID=Indicator) x WHERE r_n_n >= 1

当我在 Microsoft SQL Management-Studio 中复制此代码并执行它时,它会显示预期的结果。在Java中执行它时

        s = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
        rs = s.executeQuery(sql);

它说“无效的列名'Indicator'”。WID 和 AID 来自表 1。de 和 Indicator 来自表 2。我使用 Java 和 JDTS 进行了其他几个查询,它们都运行良好。只有那个带有 Join 的查询不起作用。我认为这与此有关,但我不知道是什么。

有人有想法吗?提前致谢并致以最诚挚的问候。

编辑:目前我使用 JTDS 1.2.5,但我也尝试了 1.3.0,但没有任何区别。

4

1 回答 1

0

If Indicatorand deare fromTable2在查询中写下。不要假设它是隐含的。此外,您应该按照应该编写的方式编写连接 - 使用 JOIN 子句,而不是使用“旧式”隐式方式。

此外,如果您使用 TOP,则必须添加 ORDER BY,否则您将不知道您将获得什么 15 行。

不确定它是否会对您有所帮助,但请尝试(类似):

SELECT TOP 15 WID,AID,de FROM 
(
    SELECT t1.WID, t1.AID, t2.de, ROW_NUMBER() OVER (ORDER BY t1.WID ASC) AS r_n_n 
    FROM [database].[dbo].[table1] t1
    INNER JOIN [database].[dbo].[table2] t2 ON t1.AID = t2.INDICATOR
) x 
WHERE r_n_n >= 1
ORDER BY r_n_n
于 2013-05-08T11:47:09.540 回答