还有就是 a left join b left join c on a.id=b.id and.... 'and....'没见过这种写法
这种写法是错的,应该是 select * from a left join b on a.id=b.id left join c on a(or b).id=c.id
on ....后面不能加and 吗
多表联接限制条件的话只能在where后面吗
如果 a left join b left join c 左联接 把谁都显示出来 --------------------------- 把a全部显示出来 ----------------------------------------------------------------------- 还有就是 a left join b left join c on a.id=b.id and.... 'and....'没见过这种写法 把a全部显示出来,只有符合and条件的才会显示出来,否则显示NULL
如果 a left join b left join c 左联接 把谁都显示出来 还有就是 a left join b left join c on a.id=b.id and....a left join b on a.id = b.id left join c on a.id = c.id
---看这样一个例子 ---创建测试环境 Declare @a Table(id int,Name1 Varchar(10)) Insert @a Select 1,'a' Union All Select 2,'b'Declare @b Table(id int,Name2 Varchar(10)) Insert @b Select 1,'aa' Union All Select 2,'bb' Union All Select 3,'cc' Union All Select 4,'dd'Declare @c Table(id int,Name3 Varchar(10)) Insert @c Select 1,'aaa' Union All Select 2,Null Union All Select 3,'ccc' ---创建测试环境 Select * From @a Select * From @b Select * From @c ---查看结果 Select A.*,B.Name2,C.Name3 From @a A Left Join @b B On A.id=B.id Left Join @c C On A.id=C.id And C.Name3 Is Not Null
表@b中id为3和4的则不会显示出来 表@c中同理id为3的则不会显示,但是Left Join @c C On A.id=C.id And C.Name3 Is Not Null 我多接了个条件And C.Name3 Is Not Null 因为在表@c中id为2的Name3 为空,那么它只会显示id为1的那条,id为2的Name3则为空
---这样也许会更好理解点 ---创建测试环境 Declare @a Table(id int,Name1 Varchar(10)) Insert @a Select 1,'a' Union All Select 2,'b'Declare @b Table(id int,Name2 Varchar(10)) Insert @b Select 1,'aa' Union All Select 2,'bb' Union All Select 3,'cc' Union All Select 4,'dd'Declare @c Table(id int,Name3 Varchar(10)) Insert @c Select 1,'aaa' Union All Select 2,'bbb' Union All Select 3,'ccc' ---创建测试环境 Select * From @a Select * From @b Select * From @c ---查看结果 Select A.*,B.Name2,C.Name3 From @a A Left Join @b B On A.id=B.id Left Join @c C On A.id=C.id And C.Name3='aaa' ---注意这里所接的条件
Select A.*,B.Name2,C.Name3 From @a A Left Join @b B On A.id=B.id Left Join @c C On A.id=C.id And A.id='1' 如果是这样‘And A.id=1’怎么只会影响C.Name3得结果?
---创建测试环境 Declare @a Table(id int,Name1 Varchar(10)) Insert @a Select 1,'a' Union All Select 2,'b'Declare @b Table(id int,Name2 Varchar(10)) Insert @b Select 1,'aa' Union All Select 2,'bb' Union All Select 3,'cc' Union All Select 4,'dd'Declare @c Table(id int,Name3 Varchar(10)) Insert @c Select 1,'aaa' Union All Select 2,'bbb' Union All Select 3,'ccc' ---创建测试环境 Select * From @a Select * From @b Select * From @c ---查看结果 Select A.*,B.Name2,C.Name3 From @a A Left Join @b B On A.id=B.id Left Join @c C On A.id=C.id And C.Name3='aaa' ---注意这里所接的条件 Where A.id=1 ---如果你只想显示表@a中id=1,这里加Where
我的意思是为什么只有C.Name3是null,C.Name2不是null
Select A.*,B.Name2,C.Name3 From @a A Left Join @b B On A.id=B.id --B.Name2这里条件已成立 Left Join @c C On A.id=C.id And A.id='1' --C.Name3是null主要是这句的影响, 在这里你可以改成A.id='2'看看结果是怎么的??你就会明白了
不是如果只有只有Name3,B.Name2 应该是 Select A.*,B.Name2,C.Name3 From @a A Left Join @b B On A.id=B.id And A.Name1='a' Left Join @c C On A.id=C.id And A.Name1='a'
bibixiao() ( ) 信誉:100 2007-09-04 16:24:04 得分: 0 不是如果只有只有Name3,B.Name2 应该是 Select A.*,B.Name2,C.Name3 From @a A Left Join @b B On A.id=B.id And A.Name1='a' Left Join @c C On A.id=C.id And A.Name1='a' ------------------------------------------------- 为什么不是???? 那么运行下面这句看看是什么结果?? Select A.*,B.Name2,C.Name3 From @a A Left Join @b B On A.id=B.id And A.Name1='a' Left Join @c C On A.id=C.id
首先你要理解 Left Join @b B On A.id=B.id 再去接And条件的目的, 这里And之后这个条件的所起到的作用...... 可将On A.id=B.id And ..这句,理解成Where A.id=B.id And .....
Select A.*,B.Name2,C.Name3 From @a A Left Join @b B On A.id=B.id And A.Name1='a' Left Join @c C On A.id=C.id 看了这句结果LZ应该明白了吧????
还有就是 a left join b left join c on a.id=b.id and.... 'and....'没见过这种写法 ------------------------- 用where的话,where会同时对join的相关表先进行条件筛选再进行连接 但我们一般都要求要join相关表中的所有记录,所以不能用where 用and的话在join时不会筛选记录,而在select时筛选。。表达能力不太强...见谅
'and....'没见过这种写法
select * from a left join b on a.id=b.id left join c on a(or b).id=c.id
把谁都显示出来
---------------------------
把a全部显示出来
-----------------------------------------------------------------------
还有就是 a left join b left join c on a.id=b.id and....
'and....'没见过这种写法
把a全部显示出来,只有符合and条件的才会显示出来,否则显示NULL
把谁都显示出来
还有就是 a left join b left join c on a.id=b.id and....a left join b on a.id = b.id
left join c on a.id = c.id
---创建测试环境
Declare @a Table(id int,Name1 Varchar(10))
Insert @a Select 1,'a'
Union All Select 2,'b'Declare @b Table(id int,Name2 Varchar(10))
Insert @b Select 1,'aa'
Union All Select 2,'bb'
Union All Select 3,'cc'
Union All Select 4,'dd'Declare @c Table(id int,Name3 Varchar(10))
Insert @c Select 1,'aaa'
Union All Select 2,Null
Union All Select 3,'ccc'
---创建测试环境
Select * From @a
Select * From @b
Select * From @c
---查看结果
Select A.*,B.Name2,C.Name3
From @a A
Left Join @b B On A.id=B.id
Left Join @c C On A.id=C.id And C.Name3 Is Not Null
表@c中同理id为3的则不会显示,但是Left Join @c C On A.id=C.id And C.Name3 Is Not Null
我多接了个条件And C.Name3 Is Not Null
因为在表@c中id为2的Name3 为空,那么它只会显示id为1的那条,id为2的Name3则为空
---创建测试环境
Declare @a Table(id int,Name1 Varchar(10))
Insert @a Select 1,'a'
Union All Select 2,'b'Declare @b Table(id int,Name2 Varchar(10))
Insert @b Select 1,'aa'
Union All Select 2,'bb'
Union All Select 3,'cc'
Union All Select 4,'dd'Declare @c Table(id int,Name3 Varchar(10))
Insert @c Select 1,'aaa'
Union All Select 2,'bbb'
Union All Select 3,'ccc'
---创建测试环境
Select * From @a
Select * From @b
Select * From @c
---查看结果
Select A.*,B.Name2,C.Name3
From @a A
Left Join @b B On A.id=B.id
Left Join @c C On A.id=C.id And C.Name3='aaa' ---注意这里所接的条件
From @a A
Left Join @b B On A.id=B.id
Left Join @c C On A.id=C.id And A.id='1'
如果是这样‘And A.id=1’怎么只会影响C.Name3得结果?
Declare @a Table(id int,Name1 Varchar(10))
Insert @a Select 1,'a'
Union All Select 2,'b'Declare @b Table(id int,Name2 Varchar(10))
Insert @b Select 1,'aa'
Union All Select 2,'bb'
Union All Select 3,'cc'
Union All Select 4,'dd'Declare @c Table(id int,Name3 Varchar(10))
Insert @c Select 1,'aaa'
Union All Select 2,'bbb'
Union All Select 3,'ccc'
---创建测试环境
Select * From @a
Select * From @b
Select * From @c
---查看结果
Select A.*,B.Name2,C.Name3
From @a A
Left Join @b B On A.id=B.id
Left Join @c C On A.id=C.id And C.Name3='aaa' ---注意这里所接的条件
Where A.id=1 ---如果你只想显示表@a中id=1,这里加Where
From @a A
Left Join @b B On A.id=B.id --B.Name2这里条件已成立
Left Join @c C On A.id=C.id And A.id='1' --C.Name3是null主要是这句的影响,
在这里你可以改成A.id='2'看看结果是怎么的??你就会明白了
我的意思是为什么只有C.Name3是null,C.Name2不是null
----------------------------------------------------
C.Name2是你不是打错了,C只有Name3,B.Name2吧
应该是
Select A.*,B.Name2,C.Name3
From @a A
Left Join @b B On A.id=B.id And A.Name1='a'
Left Join @c C On A.id=C.id And A.Name1='a'
不是如果只有只有Name3,B.Name2
应该是
Select A.*,B.Name2,C.Name3
From @a A
Left Join @b B On A.id=B.id And A.Name1='a'
Left Join @c C On A.id=C.id And A.Name1='a'
-------------------------------------------------
为什么不是????
那么运行下面这句看看是什么结果??
Select A.*,B.Name2,C.Name3
From @a A
Left Join @b B On A.id=B.id And A.Name1='a'
Left Join @c C On A.id=C.id
Left Join @b B On A.id=B.id 再去接And条件的目的,
这里And之后这个条件的所起到的作用......
可将On A.id=B.id And ..这句,理解成Where A.id=B.id And .....
From @a A
Left Join @b B On A.id=B.id And A.Name1='a'
Left Join @c C On A.id=C.id
看了这句结果LZ应该明白了吧????
'and....'没见过这种写法
-------------------------
用where的话,where会同时对join的相关表先进行条件筛选再进行连接
但我们一般都要求要join相关表中的所有记录,所以不能用where
用and的话在join时不会筛选记录,而在select时筛选。。表达能力不太强...见谅
免费注册地址:
www.agloco.com/r/BBHB0372
由于是国外网站所以打开是可能有点慢 请耐心等待一会
通过一个朋友的推荐,我最近加入了AGLOCO。现在我也把它推荐给您,因为我很中意AGLOCO的意念,并且我想邀您一同分享这个全新的、令人激动的互联网概念。AGLOCO的故事十分简单.您是否已意识到自己是多么的具有价值? 广告商、搜索引擎的供应商以及网络零售商为了想在您上网的时候吸引到您, 花了数以亿计的金钱。但是您能从中得到多少钱呢? 答案是零。AGLOCO却认为您应该得到相应的报酬。
AGLOCO站在其会员的立场从这些公司挣得钱财。(例如,目前每个AOL用户使用一次Google搜索, Google都要支付给AOL10美分。然而Google仍有足够的利润来支付16亿美元给YouTube, 一个刚成立18个月的网站, 该网站的内容都是免费对其会员开放的!
那么有什么附加条件吗? 没有。-没有木马程序, 没有弹出的广告也没有垃圾邮件-成为会员和使用软件都是免费的,并且AGLOCO是100%会员所有的。保护隐私是AGLOCO的核心价值观, 因此AGLOCO绝对不会出售或出租会员的信息。因此, 立即去AGLOCO注册对我们双方都有利。如果您使用此链接进行注册, 我将会因为成功推荐并有助于构建AGLOCO社区而自动得到推荐人积分.
www.agloco.com/r/BBHB0372 请点击或复制到浏览器上注册
注意:越早注册对你的发展是有利的