首页 文章

选择语句失败的SQL Server

提问于
浏览
0

我有一个针对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聚合或分组,因此'正确'选择语句 .

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

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

任何想法都赞赏 .

关心拉尔夫

1 回答

  • 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;
    

相关问题