【问题标题】:How to return Yes or No if nested query has result or not in SQL Server?如果嵌套查询在 SQL Server 中是否有结果,如何返回是或否?
【发布时间】:2014-10-29 00:34:48
【问题描述】:

我有一个带有嵌套查询的存储过程,它检查主表中的“category”是否与子表中的“category”匹配。 所以可以有一个匹配或没有匹配。

如果有匹配并且子查询返回某些内容,我如何返回 Yes,如果没有匹配并且子查询不返回任何内容,我如何返回 No?

我尝试了以下通常有效的方法,但前提是存在匹配,否则不会返回任何内容。

我的 SQL(缩短):

SELECT      A.categoryID,
            A.category,
            A.[description],
            (
                SELECT      'Yes' AS subscribed
                FROM        MOC_Categories_Subscribers D
                WHERE       D.category = A.category
                FOR XML PATH(''), ELEMENTS, TYPE
            )
FROM        MOC_Categories A

【问题讨论】:

    标签: sql sql-server stored-procedures nested-queries nested-query


    【解决方案1】:

    如果子查询没有返回任何行,那么您的结果将为 NULL。因此,您需要检查它。在 SQL Server 中,您可以使用函数 ISNULLCOALESCE 来执行此操作,这取决于您使用的版本

    SELECT A.categoryID,
           A.category,
           A.[description],
           COALESCE((SELECT TOP 1 'Yes'
                     FROM MOC_Categories_Subscribers D
                     WHERE D.category = A.category), 'No') AS Result
    FROM MOC_Categories A
    

    【讨论】:

    • 太完美了——正是我想要的。非常感谢!
    【解决方案2】:
    SELECT      A.categoryID,
                A.category,
                A.[description],
                (
                    SELECT      
                    case 
                       when count(subscribed) > 0 then 'Yes'
                       else 'No'
                    end
                    FROM        MOC_Categories_Subscribers D
                    WHERE       D.category = A.category
                )
    FROM        MOC_Categories A
    

    【讨论】:

    • 也谢谢你!
    【解决方案3】:

    您可以使用outer join,如果不匹配则返回null 值。结合case 转换为是/否值:

    SELECT  A.categoryID,
            A.category,
            A.[description],
            subscribed = CASE
               WHEN D.category IS NOT NULL THEN 'Yes'
               ELSE 'No'
               END,
    FROM        MOC_Categories A
    LEFT OUTER JOIN MOC_Categories_Subscribers D
       ON D.category = A.category
    

    【讨论】:

    • 在这种情况下,查询的语义会有所不同。如果我们有一个一对多的关联,结果将加倍
    • 是的,但在这种情况下,OP 指定了“一或无”。
    猜你喜欢
    • 2016-07-23
    • 2013-03-27
    • 1970-01-01
    • 2023-04-10
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    相关资源
    最近更新 更多