| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 936 人关注过本帖
标题:请教一条简单的SQL SERVER里的查询语句问题
取消只看楼主 加入收藏
easyppt
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:248
专家分:462
注 册:2021-11-24
结帖率:100%
收藏
 问题点数:0 回复次数:2 
请教一条简单的SQL SERVER里的查询语句问题
表t1/t2/t3 的内容如下(测试用,所以字段简单),关系就是  t1.fid = t2.fid  ,而t2 又和t3的关系是 t2.entryid=t3.entryid
Create Table [dbo].[t1]([fid] [int] Null,[a1] [char](10) Null) On [PRIMARY]
Create Table [dbo].[t2]([fid] [int] Null,[entryid] [int] Null,[a1] [nchar](10) Null) On [PRIMARY]
Create Table [dbo].[t3]([nid] [int] Null,[entryid] [int] Null,[a1] [char](10) Null) On [PRIMARY]

insert into t1(fid,a1) values(1,'a1')
insert into t1(fid,a1) values(2,'a1')
insert into t1(fid,a1) values(3,'a1')

insert into t2(fid,entryid,a1) values(1,1,'a1')
insert into t2(fid,entryid,a1) values(1,2,'a1')
insert into t2(fid,entryid,a1) values(1,3,'a1')
insert into t2(fid,entryid,a1) values(1,3,'a1')

insert into t3(nid,entryid,a1) values(1,3,'a1')
insert into t3(nid,entryid,a1) values(2,3,'a1')

我的问题下面的语句执行结果为什么是空,我希望的是只有t1表的全部记录,,因为 t1 是 left join t2的,而t2 和 t3 是INNER 无结果,应该不影响 t1吧? 所以结果应该只有t1的记录啊,为什么实际情况是无记录了,  inner 影响的 应该是直接关联的2个表啊,怎么还影响其他表呢?

select * from t1 left join t2 on t2.fid=t1.fid inner join t3 on t3.entryid=t2.entryid and t3.nid=999

麻烦大家帮忙解答一下,谢谢。

难道只能把 t2 和 t3 写成 子查询 再和 t1连接 ??
select * from t1 left join (select t2.fid,t2.entryid,t3.a1 from t2 inner join t3 on t3.entryid=t2.entryid and t3.nid=999) as mx on mx.fid=t1.fid



[此贴子已经被作者于2022-7-29 09:07编辑过]

搜索更多相关主题的帖子: join insert values Null into 
2022-07-29 09:01
easyppt
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:248
专家分:462
注 册:2021-11-24
收藏
得分:0 
我要的最终结果,就是最后面写的语句结果。

前面百度了一下,重新温习了一下SQL语法,应该是我理解错了语句。 多连接的关系是  自上而下的,即: 第一个left 结果  再和 第二个inner连接,这样 最终结果肯定是无记录。
我错误理解为:inner 优先于 left  也就是  t2和 t3 先 处理  再和 t1 left ,而这种需求,只能用:
select * from t1 left join (select t2.fid,t2.entryid,t3.a1 from t2 inner join t3 on t3.entryid=t2.entryid and t3.nid=999) as mx on mx.fid=t1.fid

我的理解对吧? 但是子查询应该会影响效率的,还有其他更好的办法吗,最能不用子查询。
虽然 可以这样:select * from t2 inner join t3 on t3.entryid=t2.entryid and t3.nid=999 right join t1 on t1.fid=t2.fid
但是我的实际案例中 t1 需要放在前面,因为 还有其他很多表参与连接。


2022-07-29 09:26
easyppt
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:248
专家分:462
注 册:2021-11-24
收藏
得分:0 
版主说的对,SQL语句 是自上而下 依次处理的结果再和下面的语句 连接,而 inner 是最后有一条,不满足条件,所以结果是空。
2022-07-29 09:51
快速回复:请教一条简单的SQL SERVER里的查询语句问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032747 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved