Warning: file_put_contents(/datas/wwwroot/jiajiahui/core/caches/caches_template/2/default/show.php): failed to open stream: Permission denied in /datas/wwwroot/jiajiahui/core/libraries/classes/template_cache.class.php on line 55

Warning: chmod(): Operation not permitted in /datas/wwwroot/jiajiahui/core/libraries/classes/template_cache.class.php on line 56
sql - 与相关子查询混淆 - 源码之家

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 

,但你不存在有不同的子查询。此外,您的一些错误可能是由于多次使用相同的别名而导致的。

最后,彼得的方法应该工作。我没有检查细节。