sql - 与相关子查询混淆
问题描述:
我一直在使用有关子查询的早期问题给出的建议。在这里看到:sql - 与相关子查询混淆
sql - multiple layers of correlated subqueries
SQL Server : left join results in fewer rows than in left table
我使用的MS SQL Server(我相信这是2005)。
什么我想现在要做的是以下几点:
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
这个结果:
我行的结果(称它为导致A),是从做以下获得我想找到未在该查询返回的行的结果,所有行:
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);
答
这可以通过设置不同:
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
如果由于某种原因,这并不返回一行,那么第一查询有重复。
答
您的叙述说,你要排除的结果:
select * from TableA as a
join TableC as c
on c.id = a.id
,但你不存在有不同的子查询。此外,您的一些错误可能是由于多次使用相同的别名而导致的。
最后,彼得的方法应该工作。我没有检查细节。