簡體   English   中英

sql函數大小寫返回多行

[英]sql function case returns more than one row

要將此查詢用作子查詢,問題在於它返回許多重復行。 試圖使用COUNT()代替存在,但是它仍然返回多個答案。 每個表只能包含一條superRef記錄。

我將在SELECT col_a中使用以下查詢,[CASE]來自MyTable

SELECT CASE
        WHEN 
         EXISTS (SELECT 1 FROM A WHERE 
            A_superRef = myTable.sysno AND A_specAttr = 'value')
        THEN 3
        WHEN     EXISTS (SELECT 1 FROM B 
            INNER JOIN С ON С_ReferenceForB = B_sysNo WHERE C_superRef = myTable.sysno AND b_type = 2)
        THEN 2
        ELSE (SELECT C_intType FROM C 
            WHERE C_superRef = myTable.sysno)
        END
    FROM A, B, C

結果:

3
3
3
3
3
3...

如果您這樣做了怎么辦? 因為我猜您正在獲得隱式的完全外部聯接AXBXC,然后為該結果集中的每一行運行case語句。

SELECT CASE
    WHEN 
     EXISTS (SELECT 1 FROM A WHERE 
        A_superRef = 1000001838012)
    THEN 3
    WHEN     EXISTS (SELECT 1 FROM B 
        INNER JOIN С ON С_ReferenceForB = B_sysNo AND C_superRef = 1000001838012 )
    THEN 2
    ELSE (SELECT C_type FROM C 
        WHERE C_superRef = 1000001838012)
    END
FROM ( SELECT COUNT(*) FROM A ) --This is a hack but should work in ANSI sql.
                                --Your milage my vary with different RDBMS flavors. 

多虧了Thorsten Kettner ,我才需要DUAL

SELECT CASE
    WHEN 
     EXISTS (SELECT 1 FROM A WHERE 
        A_superRef = 1000001838012)
    THEN 3
    WHEN     EXISTS (SELECT 1 FROM B 
        INNER JOIN С ON С_ReferenceForB = B_sysNo AND C_superRef = 1000001838012 )
    THEN 2
    ELSE (SELECT C_type FROM C 
        WHERE C_superRef = 1000001838012)
    END
FROM DUAL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM