Mysql Select语句使SQL Server失败

Mysql Select语句使SQL Server失败,mysql,sql-server,Mysql,Sql Server,我有一个select语句在jsp中针对SQL Server运行(以前使用MySql没有问题) 添加前1是因为SQL Server会抱怨order by子句(但仅当在jsp中显示结果时,而不是在SQL Server Management Studio中运行查询时) 此查询在SQLServerManagementStudio中运行良好 SELECT TOP 1 alerts.id, alerts.ts, asset_firstname, asset_lastname, assetid, alertt

我有一个select语句在jsp中针对SQL Server运行(以前使用MySql没有问题)

添加前1是因为SQL Server会抱怨order by子句(但仅当在jsp中显示结果时,而不是在SQL Server Management Studio中运行查询时)

此查询在SQLServerManagementStudio中运行良好

SELECT TOP 1
alerts.id,
alerts.ts,
asset_firstname,
asset_lastname,
assetid,
alerttype.name,
node.zonename,
node.ipaddress,
node.zonegroupid
from
alerts, asset, alerttype, node, alertrules
where
ack=0 and
alerts.nodeid = node.id and
alerts.alerttypeid = alerttype.id and
alertrules.alerttypeid = alerts.alerttypeid and
alerts.assetid = asset.id and
alerts.alerttypeid = 1 and
asset.id=1157 and
alertrules.userid = 1
order by alerts.ts desc
但是,在jsp中运行时,它返回“Column alerts.ts在select列表中无效,因为它不包含在聚合函数或GROUP BY子句中”

我不希望alerts.ts按聚合或分组,因此使用“correct”select语句

如果删除TOP 1或alerts.ts desc,查询将返回错误的行(最早记录而不是最新记录)

事实证明,转换应该是简单的基本SQL命令以使它们能够与SQL Server一起正常运行是一场噩梦

任何想法都值得赞赏

问候 拉尔夫(我写这篇文章是作为回答,因为作为一个评论会很混乱) 您使用的是旧式联接,并且具有冗余检查。也许这会有所不同(不确定,因为这似乎是一个与JSP相关的问题):


查询工作完美;y(没有前1个垃圾)在针对MySQL的JSP中运行时,只有在针对SQL Server运行完全相同的查询时才会失败,但查询在SQL Server Management Studio中运行得非常好?为什么要将
alerts.ts=alerts.ts
放在哪里?在此之后,这里没有逻辑运算符(和/或)缺少空格:
asset.id=1157和
忽略空格和alerts.ts=alerts.ts已被删除(试图绕过错误消息)@Ralph您可以编辑自己的帖子并向我们显示正确的代码。谢谢Cetin,尽管您修改的select会产生完全相同的错误(alerts.ts无效等),但与以前一样,只有在jsp中运行时,而不是在SQL Server管理工作室中运行时。我可能不得不放弃使用SQL Server的想法。(责怪)如果没有特别的理由尝试SQL Server,我也会先想到postgreSQL(责怪)但我认为您仍然会查看JSP调用。此SQL不会导致此类错误(不在SQL server、postgreSQL、mySQL或…)中。不幸的是,由于基于SQL server的机会很大,您不得不尝试迁移。错误似乎来自com.microsoft.sqlserver.jdbc,因此可能是jdbc驱动程序的问题(由于查询在SQL Server Mgmt Studio中运行时没有错误)。将暂时放弃。再次感谢。
SELECT TOP(1)
  alerts.id, alerts.ts,
  asset_firstname,
  asset_lastname,
  assetid,
  alerttype.name,
  node.zonename,
  node.ipaddress,
  node.zonegroupid
from alerts
 inner join asset on alerts.assetid = asset.id 
 inner join alerttype on alerts.alerttypeid = alerttype.id
 inner join node on alerts.nodeid = node.id
 inner join alertrules on alertrules.alerttypeid = alerts.alerttypeid
where ack=0 and 
alerts.alerttypeid = 1 and
asset.id=1157 and
alertrules.userid = 1
order by alerts.ts desc;