【发布时间】:2013-04-21 05:13:29
【问题描述】:
我一直在使用之前关于子查询的问题中给我的建议。见这里:
sql - multiple layers of correlated subqueries
SQL Server : left join results in fewer rows than in left table
我使用的是 ms sql server(我相信是 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);
【问题讨论】: