选择值为"if Id exists in another table/view"的列



这做了我想要的:

SELECT a.*,
IIF(l.Id IS NOT NULL,
CAST(1 AS BIT),
CAST(0 AS BIT)) AS IsLatest
FROM [A] a
LEFT JOIN [LatestA] l on (l.Id = a.Id)

LatestA是一个仅包含最新A的视图。

但是,我觉得IIF(..., TRUE, FALSE)很愚蠢。有没有更好的方法来测试LatestAId的存在?

您的查询很好。某些 RDBMS 具有将谓词的结果转换为布尔值的快捷方式,但不能将 SQL Server 转换为布尔值。

您可以稍微简化一下,如下所示:

SELECT 
a.*,
CASE WHEN l.Id IS NULL THEN 0 ELSE 1 END AS IsLatest
FROM [A] a
LEFT JOIN [LatestA] l on l.Id = a.Id

请注意,我使用了CASE表达式而不是IIF()函数:我更喜欢它,因为它是标准的SQL。我还发现在这里使用IS NULLIS NOT NULL更简单。

如果您出于某种原因确实想返回BIT,那么:

SELECT 
a.*,
CAST(CASE WHEN l.Id IS NULL THEN 0 ELSE 1 END AS BIT) AS IsLatest
FROM [A] a
LEFT JOIN [LatestA] l on l.Id = a.Id

T-SQL不允许你使用布尔表达式作为整数值(就像MySQL一样(,因为它有第三个可能的布尔值(UNKNOWN(,所以你被困在你所拥有的东西上。您可以稍微简化一下:

SELECT a.*,
CAST(IIF(l.Id IS NOT NULL, 1, 0) AS BIT) AS IsLatest
FROM [A] a
LEFT JOIN [LatestA] l on (l.Id = a.Id)

你可以使用 EXISTS 运算符,它用于检查记录是否存在

if exists ([query for ID]) BEGIN [Quert from another table] END

最新更新