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