是否可以将 的值EXISTS
用作查询的一部分?
(请注意:不幸的是,由于客户端的限制,我需要 SQLServer 2005 兼容的答案!)
因此,当返回一组结果时,其中一个列是一个布尔值,它说明子查询是否会返回任何行。
例如,我想返回用户名列表以及不同的表是否包含每个用户的任何行。以下在语法上不正确,但希望能让您了解我的意思......
SELECT T1.[UserName],
(EXISTS (SELECT *
FROM [AnotherTable] T2
WHERE T1.[UserName] = T2.[UserName])
) AS [RowsExist]
FROM [UserTable] T1
结果集包含一个名为的列和一个名为的[UserName]
布尔列[RowsExist]
。
显而易见的解决方案是使用 a CASE
,如下所示,但我想知道是否有更好的方法......
SELECT T1.[UserName],
(CASE (SELECT COUNT(*)
FROM [AnotherTable] T2
WHERE T1.[UserName] = T2.[UserName]
)
WHEN 0 THEN CAST(0 AS BIT)
ELSE CAST(1 AS BIT) END
) AS [RowsExist]
FROM [UserTable] T1