MSSQL - 使用Java / JTDS和Join的列名无效

时间:2013-05-08 11:33:51

标签: java sql sql-server sql-server-2005 jtds

我想在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);

它说“无效的列名称'指标'”。 WID和AID来自table1。 de和Indicator来自表2。 我用Java和JDTS做了一些其他查询,这些查询都运行良好。只有使用Join的查询才起作用。我认为这与此有关,但我不知道是什么。

有人有想法吗? 在此先感谢和最诚挚的问候。

编辑:目前我使用的是JTDS 1.2.5,但我也试过1.3.0这没有什么区别。

1 个答案:

答案 0 :(得分:0)

如果Indicatorde来自Table2,则在查询中写入。不要以为它是隐含的。你也应该按照它们应该写的方式编写连接 - 使用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