我有两个表,以下查询在最大实例内存不受限制时检索os内存并显示错误消息:
--osmemory --instancememory
servername osmemory servername instancename instancememory
---------- -------- ---------- ------------ --------------
srva 4096 srva srva\insta 2048
srvb 6144 srvb srvb\instb 2147483647
select i.ServerName
, i.instancename
, case i.instance memory LIKE '2147483647'
then (select o.osmemory from o.osmemory
join i.instance on o.servername = i.servername)
...
子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
我一直在尝试(我还在尝试)各种剧本,但没有运气。
有人可以帮忙吗? 感谢
答案 0 :(得分:0)
错误很明显。您在允许一列和最多一行的上下文中使用子查询。这称为“标量子查询”。解决此问题的一种方法是使用聚合函数:
select i.ServerName, i.instancename,
(case i.instance memory LIKE '2147483647'
then (select max(o.osmemory) from o.osmemory join i.instance on o.servername = i.servername)
. . .
然而,这可能不是你的意图。
EDTI:
如果我不得不推测,那么你的问题就是子查询中的join
。您可能只想要一个相关的子查询。这是猜测,但是:
select i.ServerName, i.instancename,
(case i.instance memory LIKE '2147483647'
then (select o.osmemory from o.osmemory where o.servername = i.servername)
. . .
答案 1 :(得分:0)
如果结果始终为1,则使用Max(o.osmemory)或Max(o.osmemory)并不重要。