我一直在使用前面关于子查询的问题中给我的建议。请看这里:
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);发布于 2013-04-21 04:57:00
执行此设置差异:
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-21 05:00:07
你的叙述说你想从以下方面排除结果:
select * from TableA as a
join TableC as c
on c.id = a.id但是您的not exists有一个不同的子查询。此外,您的某些错误可能是由于多次使用同一别名而导致的。
最后,Pieter的方法应该是可行的。我没有检查细节。
https://stackoverflow.com/questions/16125044
复制相似问题