如果存在连接数据条目,则返回 true (1),否则在 MS-SQL 中返回 false (0)

And*_*elt 7 sql sql-server join

我有一个 SQL 语句,它以 1 对 1 的关系连接到两个不同的表。对于每个连接,BIT如果连接成功与否,我想返回一个值(0 或 1)。

假设我们有一个基表Base以及表A和,它们通过公共 IDB连接在一起。LEFT JOIN我想返回ID,以及一个字段IsA和一个字段IsB

在 Microsoft SQL Server 中最有效地执行此操作的最佳实践解决方案是什么?

顺便说一下,我目前的做法是这样的:

CAST(ISNULL(A.ID, 0) AS BIT) AS IsA,
CAST(ISNULL(B.ID, 0) AS BIT) AS IsB
Run Code Online (Sandbox Code Playgroud)

Seb*_*sch 3

您可以使用以下内容,CASE WHEN而不是使用ISNULL

SELECT Base.*, A.id, B.id, 
  CAST(CASE WHEN A.id IS NULL THEN 0 ELSE 1 END AS BIT) AS IsA,
  CAST(CASE WHEN B.id IS NULL THEN 0 ELSE 1 END AS BIT) AS IsB
FROM Base LEFT JOIN A ON Base.id = A.base_id
  LEFT JOIN B ON Base.id = B.base_id
Run Code Online (Sandbox Code Playgroud)

dbfiddle.uk 上的演示

与您当前的方法相比,该解决方案具有相同的效率。但也请参阅此答案(检查多个列的NULL值)。在那里您可以看到该ISNULL解决方案效率较低。就你而言,这没有什么大区别。

另请注意:如果列值为 ,也可以ISNULL返回。因此,按照您当前的方法,您会遇到这种情况。00False