Select语句失败的SQL Server

时间:2018-08-29 10:02:33

标签: mysql sql-server

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

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

此查询在SQL Server Management Studio中运行正常

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中运行时,它返回“列alerts.ts在选择列表中无效,因为它既不在聚合函数中也不在GROUP BY子句中。”

我不希望将alert.ts汇总或分组,因此不希望使用“正确”的select语句。

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

转换应该是简单易懂的基本SQL命令,以便它们与SQL Server一起正常运行是一个噩梦。

任何想法都很感激。

问候 拉尔夫

1 个答案:

答案 0 :(得分:0)

(我将其写为答案,因为发表评论会很混乱) 您正在使用旧式联接,并且具有多余的检查。也许这可以有所作为(不确定,因为这似乎与JSP有关):

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;