t-sql - 在 SQL 中使用 EXISTS 作为列

标签 t-sql sql-server-2005 exists

是否可以使用 EXISTS 的值作为查询的一部分?

(请注意:不幸的是,由于客户端限制,我需要 SQLServer 2005 兼容的答案!)

因此,当返回一组结果时,其中一列是一个 bool 值,用于说明子查询是否会返回任何行。

例如,我想返回用户名列表以及不同的表是否包含每个用户的任何行。以下内容在语法上不正确,但希望能让您了解我的意思...

SELECT T1.[UserName],
    (EXISTS (SELECT * 
             FROM [AnotherTable] T2 
             WHERE T1.[UserName] = T2.[UserName])
    ) AS [RowsExist]
FROM [UserTable] T1

结果集包含名为 [UserName] 的列和名为 [RowsExist] 的 bool 列。

显而易见的解决方案是使用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

最佳答案

您的第二个查询语法无效。

SELECT T1.[UserName],
       CASE
         WHEN EXISTS (SELECT *
                      FROM   [AnotherTable] T2
                      WHERE  T1.[UserName] = T2.[UserName]) THEN CAST(1 AS BIT)
         ELSE CAST(0 AS BIT)
       END AS [RowsExist]
FROM   [UserTable] T1 

通常没问题,将作为半连接实现。

文章Subqueries in CASE Expressions对此进行了进一步讨论。

在某些情况下,COUNT 查询实际上可以执行得更好,但 as discussed here

关于t-sql - 在 SQL 中使用 EXISTS 作为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18787453/

相关文章:

sql-server - 将缺失记录添加到结果表记录中

c# - 解析 MDX 字符串的 CLR 函数

sql-server - 查找非字母字符串中的字符串

mysql - 我可以使用 EXISTS 而不是 JOIN 来加速这个查询吗?

MySQL IF EXISTS UPDATE ELSE INSERT - 完整 SQL 示例(不重复)

vba - 如果工作表不存在,则创建它 (VBA Excel)

Sql Server通过tsql更改所有索引的填充因子值

java - weblogic卡住问题

sql - 使用初始值运行总计,然后添加日期规定的总计

sql-server - 日期范围重叠检查约束