关于left join 的问题,求各位大神指导;查询出来的记录数不一样

wzx87 2013-11-26 05:05:36
我用这条语句查询:SELECT * FROM A WHERE pname='壹号' 一共1000条数据

后面用这条语句查询:SELECT * FROM text A
left join s_order o
on a.RoomGUID=o.roomguid
WHERE pname='壹号' 查询出来一共1010条数据;

为什么两条语句查询出来的东西不一样? 求大神求导啊
...全文
468 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChinaITOldMan 2013-11-26
  • 打赏
  • 举报
回复
因为text表RoomGUID字段与s_order表roomguid字段存在一对多的关系.
LongRui888 2013-11-26
  • 打赏
  • 举报
回复
所以这样的话,直接:SELECT * FROM A WHERE pname='壹号' 就1条, 而关联之后: select * from a left join s_order o on o.roomguid = a.roomguid where a.pname = '壹号' 就是11条,就多了10条了,这个主要是left join导致的
-晴天 2013-11-26
  • 打赏
  • 举报
回复
因为在s_order 表中有相同 roomguid 的多个行.
create table test(roomguid nvarchar(20),pname nvarchar(20))
insert into test select 'aaaaa','壹号'
insert into test select 'bbbbb','壹号'
create table s_order(roomguid nvarchar(20))
insert into s_order select 'aaaaa'
insert into s_order select 'aaaaa'
go
SELECT * FROM test A 
                 left join s_order o
                 on a.RoomGUID=o.roomguid
                 WHERE pname='壹号'   
/*
roomguid             pname                roomguid
-------------------- -------------------- --------------------
aaaaa                壹号                   aaaaa
aaaaa                壹号                   aaaaa
bbbbb                壹号                   NULL

(3 行受影响)
*/
go
drop table test,s_order
唐诗三百首 2013-11-26
  • 打赏
  • 举报
回复
因为text表RoomGUID字段与s_order表roomguid字段存在一对多的关系.
LongRui888 2013-11-26
  • 打赏
  • 举报
回复
举个例子:


;with a
as
(
select 1 roomguid,'壹号' pname
),

s_order 
as
(
select 1 roomguid,'aa' vv
union all select 1 ,'aa'
union all select 1 ,'aa'
union all select 1 ,'aa'
union all select 1 ,'aa'
union all select 1 ,'aa'
union all select 1 ,'aa'
union all select 1 ,'aa'
union all select 1 ,'aa'
union all select 1 ,'aa'
union all select 1 ,'aa'
)

select *
from a
left join s_order o
       on o.roomguid = a.roomguid
where a.pname = '壹号'
/*11条数据
roomguid	pname	roomguid	vv
1	壹号	1	aa
1	壹号	1	aa
1	壹号	1	aa
1	壹号	1	aa
1	壹号	1	aa
1	壹号	1	aa
1	壹号	1	aa
1	壹号	1	aa
1	壹号	1	aa
1	壹号	1	aa
1	壹号	1	aa
*/   
sdhp 2013-11-26
  • 打赏
  • 举报
回复
比如A: roomguid .... 1 壹号 s_order roomguid .... 1 a 1 b 这样结果就是 1 壹号 1 a 1 壹号 1 b 多出来数据有什么奇怪么?
LongRui888 2013-11-26
  • 打赏
  • 举报
回复
如果A 表的RoomGUID字段,有个值加入是1,而在 s_order表中有11条记录对应那么就会多查出来10条了

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧