[英]SQL CASE sub-query
我有两个表,以下查询可在最大实例内存不受限制时检索操作系统内存,并显示错误消息:
--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。 当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。
我一直在尝试(而且我还在尝试)各种脚本,但是没有运气。
有人可以帮忙吗? 谢谢
错误很明显。 您在允许一列最多一行的上下文中使用子查询。 这称为“标量子查询”。 解决此问题的一种方法是使用聚合函数:
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)
. . .
还是使用Max(o.osmemory)或Max(o.osmemory)不管结果是否始终为1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.