繁体   English   中英

SQL CASE子查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM