我有一个针对SQL Server的select语句在jsp中运行(以前使用MySql没有问题)。
添加前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子句中”。
我不想让alerts.ts聚合或分组,因此使用了“正确的”select语句。
如果我删除TOP 1或alerts.ts desc,查询将返回错误的行(最早的记录而不是最新的记录)
事实证明,转换本应简单明了的基本SQL命令以使其在SQL Server中正常运行是一场噩梦。
任何想法都很感谢。
致敬拉尔夫
发布于 2018-08-29 18:13:38
(我写这篇文章是为了回答,因为作为注释会很混乱)你正在使用旧风格的连接,并且有多余的检查。也许这会有所不同(不确定,因为这似乎是与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; https://stackoverflow.com/questions/52074734
复制相似问题