2016-04-20 90 views
0

我有兩個表,下面的查詢檢索操作系統內存時MAX實例存儲是無限的,錯誤消息:SQL CASE子查詢

--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) 
... 

子查詢返回多個值。當子查詢遵循=,!=,<,< =,>,> =或當子查詢用作表達式時,這是不允許的。

我一直在嘗試(我仍在嘗試)各種腳本,但沒有運氣。

有人可以幫忙嗎? 謝謝

+0

哪些DBMS您使用不要緊? –

+0

添加您的創建表腳本或更好地提供提琴手 –

+0

選擇(從osmemory o選擇o.osmemory o其中o.servername = i.servername),i.instancename from instancememory i其中i.instancememory = 2147483647; –

回答

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) 
     . . . 
+0

謝謝你的工作。 – Kukah

+0

我曾經嘗試過,但我猜錯誤了。 – Kukah

0

或者使用MAX(o.osmemory)或Max(o.osmemory)如果結果將始終爲1