0

我一直在使用早先关于子查询的问题中给我的建议。看这里:

sql - 多层相关子查询

SQL Server:左连接导致的行数少于左表中的行数

我正在使用 ms sql 服务器(我相信是 2005 年)。

我现在要做的是:

我有一个行结果(称为结果 A),它是通过执行以下操作获得的:

select * from TableA as a
join (select * from TableB where RealDate = '4/20/2013 12:00:00 AM') as b
on a.id = b.id

在此结果中,我想查找不在此查询返回的行的结果中的所有行:

select * from TableA as a
join TableC as c
on c.id = a.id

本质上,我遇到的情况是第一个查询产生 246 条记录,而第二个查询产生 247 条记录。我期待第一个结果返回 247 条记录(所有这些都应该在第二个查询返回的记录列表中)。所以现在我需要调查缺少哪条记录,以便采取适当的措施。

我尝试执行以下操作,但收到各种错误:

select * from (select * from TableA as a
join (select * from TableB where RealDate = '4/20/2013 12:00:00 AM') as b
on a.ul_id = b.id))
as result_A
where not exists (select 1 from (select * from TableA as a
                  join TableC as c
                  on c.id = a.ul_id) as result_B
                  where result_A.ul_id = result_B.id);
4

2 回答 2

2

做这个设置差异:

select a.* from TableA as a
join TableC as c
on c.id = a.id

except

select a.* from TableA as a
join (select * from TableB where RealDate = '4/20/2013 12:00:00 AM') as b
on a.id = b.id

如果由于某种原因这没有返回一行,则第一个查询有重复。

于 2013-04-20T20:56:59.810 回答
1

您的叙述说您要排除以下结果:

select * from TableA as a
join TableC as c
on c.id = a.id

但是您的不存在有不同的子查询。此外,您的某些错误可能是由于多次使用同一个别名而引起的。

最后,Pieter 的方法应该奏效。我没有检查细节。

于 2013-04-20T21:00:06.543 回答