Sql server T-SQL列,指示一个或多个记录存在于单独的表中

Sql server T-SQL列,指示一个或多个记录存在于单独的表中,sql-server,tsql,Sql Server,Tsql,我想要一个从表a中选择所有记录而不选择其他记录的查询。但是,我希望我的查询包含一列,该列指示tableB中存在一条或多条记录 左外联接tableA到tableB不起作用,因为如果tableB中有两条记录与tableA中的一条记录相关,则结果集中会有两条记录。我只想要一个 右外部联接不起作用,因为我的查询返回tableB中与tableA中的任何记录都不匹配的所有记录。我不想从tableB中获取与tableA中至少1条记录不匹配的记录 内部连接也失败了,因为我没有得到tableA中的所有记录;仅表B

我想要一个从表a中选择所有记录而不选择其他记录的查询。但是,我希望我的查询包含一列,该列指示tableB中存在一条或多条记录

左外联接tableA到tableB不起作用,因为如果tableB中有两条记录与tableA中的一条记录相关,则结果集中会有两条记录。我只想要一个

右外部联接不起作用,因为我的查询返回tableB中与tableA中的任何记录都不匹配的所有记录。我不想从tableB中获取与tableA中至少1条记录不匹配的记录

内部连接也失败了,因为我没有得到tableA中的所有记录;仅表B中包含匹配记录的记录

好像我需要这样一个查询:

SELECT tableA.ID, IF EXISTS row in tableB THEN 1 ELSE 0 
FROM tableA <some sort of join> tableB on tableA.ID = tableB.FKtoTableA

由于目标只是测试是否存在,因此我们强烈建议使用以下条款:

SELECT A.*
     , CASE
           WHEN EXISTS (
               SELECT 1
               FROM TableB B
               WHERE B.Id = A.Id
           ) THEN 1
           ELSE 0 
       END 
FROM TableA A

不仅如此,使用LEFT JOIN+的解决方案不为NULL或计数,而且还具有与问题陈述一致的语义的附加好处。

您可以使用子查询:

挑选 表a.*, 从tableB中选择count*,其中tableA.ID=tableB.ID作为“tableB中的计数” 从表格

如果需要,您可以在子查询周围包装一个条件语句或case语句,以提供一个更布尔的值。

您可以使用left join,只从b:

select a.id, cast(count(b.id) as bit) from a left join b on a.id = b.id group by a.id;

转换为位会将任何非零值提升为1。

不确定是否会产生差异,但可以使用isnulllselect top 1…,而不是计算行数,0