如果嵌套查询在 SQL Server 中是不是有结果,如何返回是或否?
Posted
技术标签:
【中文标题】如果嵌套查询在 SQL Server 中是不是有结果,如何返回是或否?【英文标题】: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
【问题讨论】:
【参考方案1】:如果子查询没有返回任何行,那么您的结果将为 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
【讨论】:
太完美了——正是我想要的。非常感谢!【参考方案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 指定了“一或无”。以上是关于如果嵌套查询在 SQL Server 中是不是有结果,如何返回是或否?的主要内容,如果未能解决你的问题,请参考以下文章