首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql -与相关子查询的混淆

问sql -与相关子查询的混淆
EN

Stack Overflow用户
提问于 2013-04-21 04:50:11
回答 2查看 122关注 0票数 0

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

sql - multiple layers of correlated subqueries

SQL Server : left join results in fewer rows than in left table

我使用的是ms sql server (我相信是2005)。

我现在尝试做的事情如下:

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
select * from TableA as a
join TableC as c
on c.id = a.id

基本上,我有一种情况,第一个查询得到246条记录,而第二个查询得到247条记录。我期望第一个结果返回247条记录(所有记录都应该在第二个查询返回的记录列表中)。因此,现在我需要调查丢失了哪条记录,以便采取适当的措施。

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

代码语言:javascript
复制
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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-21 04:57:00

执行此设置差异:

代码语言:javascript
复制
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

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

票数 2
EN

Stack Overflow用户

发布于 2013-04-21 05:00:07

你的叙述说你想从以下方面排除结果:

代码语言:javascript
复制
select * from TableA as a
join TableC as c
on c.id = a.id

但是您的not exists有一个不同的子查询。此外,您的某些错误可能是由于多次使用同一别名而导致的。

最后,Pieter的方法应该是可行的。我没有检查细节。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16125044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档