【发布时间】:2019-06-26 11:34:57
【问题描述】:
我正在尝试按顺序查询数据(MAC 地址),但只显示找到的第一个数据。 它大部分时间都有效,但我想当找到多个 MAC 地址时它会给我一个错误?有没有办法让这段代码工作?
我得到的错误:
MACRO SQL 错误 - 子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。
stackoverflow 中不存在语言 SWQL,我无法添加,所以我选择了 SQL-server,但它基本相同。
select coalesce((select (MAC)
from NodeMACAddresses
where NodeID=$@nodeid@), NULLIF('${MAC_Address}', ''), 'MAC address missing')
【问题讨论】:
-
错误在这里告诉你问题。似乎您在
NodeMACAddresses中有一些行与NodeID的值相同。 -
肯定不一样。 SQL Server 是一种产品,具有自己的 SQL 方言。每个数据库产品都有自己的方言。您使用的是什么产品,
SWQL是什么?如果标签不存在,很明显人们不知道它。您必须解释它是什么,使用它的产品,最好是链接 -
是的,错误很明显。如果内部查询返回多个结果,则任何期望 single 结果的函数都会出现错误,例如
COALESCE。查询也可能是个坏主意——结果应该包含MAC地址或什么都不包含。将真实结果与消息混在一起只会引入错误并混淆客户端代码。 -
根据谷歌的说法,“SWQL”是“Solarwinds 查询语言”(Use SolarWinds Query Language (SWQL) in the Orion Platform),所以我现在将其添加为标签。
-
最好的选择是只运行
select MAC from NodeMACAddresses where NodeID=$@nodeid@并修改客户端代码以处理多个结果或没有结果。
标签: sql solarwinds-orion