我想在MSSQL 2005中使用Java和JTDS来执行以下语句。我需要这样做,因为我想显示位置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);


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

有人有主意吗?
在此先感谢您,并致以最诚挚的问候。

编辑:当前我使用JTDS 1.2.5,但我也尝试了1.3.0,没有什么区别。

最佳答案

如果Indicatorde来自Table2,请在查询中编写。不要假设它是隐含的。另外,您还应该使用JOIN子句而不是“旧式”隐式方式编写应该被编写的Joins。

另外,如果您使用的是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

08-26 02:15