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