2

我有一个带有嵌套查询的存储过程,它检查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
4

3 回答 3

4

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

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
于 2014-09-04T10:23:41.873 回答
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
于 2014-09-04T09:58:18.843 回答
0

You can use an outer join, which returns null values if there is no match. Combine with a case to convert to a yes/no value:

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
于 2014-09-04T10:54:42.070 回答