社区
MS-SQL Server
帖子详情
关于left join
xiezonglin
2011-06-02 09:35:04
我在查一个表的时候,没用left join 记录数是对的,加了left join就多了很多重复的记录
去掉又正常了
left join不是以左表为准吗?怎么会使记录数增加?
...全文
167
18
打赏
收藏
关于left join
我在查一个表的时候,没用left join 记录数是对的,加了left join就多了很多重复的记录 去掉又正常了 left join不是以左表为准吗?怎么会使记录数增加?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Spade_J
2011-06-02
打赏
举报
回复
[Quote=引用 17 楼 xiezonglin 的回复:]
引用 16 楼 spade_j 的回复:
select
字段,
字段,
(select top 1 字段 from b where a.字段=b.字段 order by 字段) as ...
...
from a
有点负责,我实际的查询还更复杂,甚至是连接好几个表,还有求和,难道就只有这种方式了?
[/Quote]
那用exists吧
select * from b where not exist(select 1 from b c where b.字段=c.字段 and ......)
上面的来代替b
xiezonglin
2011-06-02
打赏
举报
回复
[Quote=引用 16 楼 spade_j 的回复:]
select
字段,
字段,
(select top 1 字段 from b where a.字段=b.字段 order by 字段) as ...
...
from a
[/Quote]
有点负责,我实际的查询还更复杂,甚至是连接好几个表,还有求和,难道就只有这种方式了?
Spade_J
2011-06-02
打赏
举报
回复
select
字段,
字段,
(select top 1 字段 from b where a.字段=b.字段 order by 字段) as ...
...
from a
xiezonglin
2011-06-02
打赏
举报
回复
[Quote=引用 12 楼 cainlai 的回复:]
看你的描述,你可能应该用inner join
[/Quote]
试了,结果一样
xiezonglin
2011-06-02
打赏
举报
回复
[Quote=引用 11 楼 spade_j 的回复:]
引用 8 楼 xiezonglin 的回复:
引用 4 楼 xyctc 的回复:
是以左为准,但要看数据及条件,出现左表对右表是一对多的情况,记录当然会增加
那怎样才能解决这个问题?就算左表对右边是一对多,但是我只要右边的第一条记录
查询时用
select top 1 * from b oder by 字段
来代替b
[/Quote]
问题是我要的是on的条件执行了以后的第一条记录,感觉不好弄阿
还有就是能不能这样,就是如果是一对多,那么我再增加一个条件,如果是一对一,那就不增加条件了
daishaodong
2011-06-02
打赏
举报
回复
left join的话,左表的全部记录会出来,右表如果没有对应左表的记录,会以null的形式出现。。
CainLai
2011-06-02
打赏
举报
回复
看你的描述,你可能应该用inner join
Spade_J
2011-06-02
打赏
举报
回复
[Quote=引用 8 楼 xiezonglin 的回复:]
引用 4 楼 xyctc 的回复:
是以左为准,但要看数据及条件,出现左表对右表是一对多的情况,记录当然会增加
那怎样才能解决这个问题?就算左表对右边是一对多,但是我只要右边的第一条记录
[/Quote]
查询时用
select top 1 * from b oder by 字段
来代替b
chuanzhang5687
2011-06-02
打赏
举报
回复
那就不要left join
--小F--
2011-06-02
打赏
举报
回复
除了一对一的以外,一对多也可以出现多的值
匹配左边的表
如果是这样
a
id col
1 a
2 b
3 c
b
id col
1 a
2 b
2 c
3 e
3 d
3 f
这样的话 就可能一对多
xiezonglin
2011-06-02
打赏
举报
回复
[Quote=引用 4 楼 xyctc 的回复:]
是以左为准,但要看数据及条件,出现左表对右表是一对多的情况,记录当然会增加
[/Quote]
那怎样才能解决这个问题?就算左表对右边是一对多,但是我只要右边的第一条记录
Spade_J
2011-06-02
打赏
举报
回复
数量应该是
a*b - 条件过滤掉的数量 + 添加外部行的数量
xiaoxiangqing
2011-06-02
打赏
举报
回复
left join是以左表为主,意思是左表的数据都会出来,不管右表有没有与它匹配的记录
xiezonglin
2011-06-02
打赏
举报
回复
就是left jion后面的表on的条件使后面的表多个记录对应前面一个记录
Billy
2011-06-02
打赏
举报
回复
是以左为准,但要看数据及条件,出现左表对右表是一对多的情况,记录当然会增加
东那个升
2011-06-02
打赏
举报
回复
left join 是左表存在,右表不存在的记录也会查询出来
AcHerat
元老
2011-06-02
打赏
举报
回复
[Quote=引用楼主 xiezonglin 的回复:]
我在查一个表的时候,没用left join 记录数是对的,加了left join就多了很多重复的记录
去掉又正常了
left join不是以左表为准吗?怎么会使记录数增加?
[/Quote]
因为你右边表经过连接条件对应出来的记录数是多条,所以结果便会有多条。
例如 a 表 id
id
---
1
b 表 id aid
id------aid
------------
1 ------ 1
2 ------ 1
select *
from a left join b on a.id = b.aid
结果集记录数便是b表的记录数!
hanger1212
2011-06-02
打赏
举报
回复
right join 呗
关于
Left
join
,你可能不知道这些
关于
Left
join
,你可能不知道这些
left
join
和
left
outer
join
有什么区别?这样解释通俗易懂
作为一名java程序员,求职面试时也会遇到mysql问题,有次我到一家软件面试,就遇到有一道笔试题是考核关于sql 的。
left
join
和
left
outer
join
有什么区别?关于
left
join
我平时编写sql表关联时用得比较多,但对于
left
outer
join
我很少用到,所以对于两者之间有什么区别,我没搞懂,于是这道题目有没有作答,面试官看了也问了下,我...
关于
LEFT
JOIN
的使用注意事项
在 SQL 中,连续的
LEFT
JOIN
操作的左表是前面所有
JOIN
操作后的中间结果,而右表是当前
LEFT
JOIN
指定的表。结果集: 保留所有 A + B 的记录,并附加匹配的 C 记录(未匹配的 C 字段为 NULL)。最终结果:保留所有 A 的记录,依次附加 B、C、D 的匹配数据(未匹配的字段为 NULL)。结果集: 包含所有 A 的记录,以及匹配的 B 记录(未匹配的 B 字段为 NULL)。左表: 第一次
LEFT
JOIN
后的结果集(即 A + B 的数据)
oracle关于
left
Join
中on条件有标识符无效的原因
我有一个project项目表,还有一个他的明细project_info表。我们需要通过project关联查出,info表里面的单位对象,和其他对象。select p.code projectCode , p.name projectNamefrom project p, project_info info
left
join
user u on u.id = info.manager
left
joi...
关于
Left
Join
On的使用
在进行公司项目超猿的CRMPC端后台会员列表页面开发时,初始为了省事方便,直接使用全表查询,由于该功能项设计了三个表的数据,全表查询导致了查询速度过于长久,被测试人员驳回优化 当我在数据库进行查询的时候,发现查询时间也是达到了令人惊悚的5.5s 首先想到的就是通过explain来查看慢sql,针对性优化 由上可见,多个全表查询导致效率变得迟缓,经过网上查找,请教同事,决定用
Left
Join
的语句来对表进行拼接,而不是全表查询。
Left
Join
俗称左连接,也就是吧
left
join
左边的表的记录全
MS-SQL Server
34,837
社区成员
254,632
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章