这个左连接该怎么写??(貌似很简单的问题)
时间:2011-09-08
来源:互联网
select * from test a
left join test1 b
on a.id = b.id and a.t = 'a'
用
select * from test a,test1 b where a.id=b.id(+)
来写,该怎么改?
作者: rainxies 发布时间: 2011-09-08
作者: opps_zhou 发布时间: 2011-09-08
select * from test a,test1 b where a.id=b.id(+) and a.t = 'a';
作者: luoyoumou 发布时间: 2011-09-08
where a.id=b.id and a.t = 'a';
作者: yyh1988923 发布时间: 2011-09-08
select * from test a left join test1 b on a.id = b.id and a.t = 'a'
的结果如下
[img=select * from test a left join test1 b on a.id = b.id and a.t = 'a'][/img]
select * from test a,test1 b where a.id=b.id(+) and a.t='a'
的结果如下:

显然不对,高手出现啊
作者: rainxies 发布时间: 2011-09-08
ID T ID
1 a 1
2 a 2
3 a
1 b
select * from test a,test1 b where a.id=b.id(+) and a.t='a'结果为:
ID T ID
1 a 1
2 a 2
3 a
显然不对啊,求高手啊!!
作者: rainxies 发布时间: 2011-09-08
作者: yangqm22 发布时间: 2011-09-08
CREATE TABLE "TEST"
( "ID" NUMBER,
"T" VARCHAR2(50)
);
CREATE TABLE "TEST1"
( "ID" NUMBER,
);
insert into test values(1,'a');
insert into test values(1,'b');
insert into test values(2,'a');
insert into test values(3,'a');
insert into test1 values(1);
insert into test1 values(2);
我要的结果是(就是最后一行的B_ID为空):
A_ID A_T B_ID
1 a 1
2 a 2
3 a
1 b
作者: rainxies 发布时间: 2011-09-08
CREATE TABLE "TEST"
( "ID" NUMBER,
"T" VARCHAR2(50)
);
CREATE TABLE "TEST1"
( "ID" NUMBER,
);
insert into test values(1,'a');
insert into test values(1,'b');
insert into test values(2,'a');
insert into test values(3,'a');
insert into test1 values(1);
insert into test1 values(2);
我要的结果是(就是最后一行的B_ID为空):
A_ID A_T B_ID
1 a 1
2 a 2
3 a
1 b
作者: rainxies 发布时间: 2011-09-08
你要求 a.t = 'a'
但是你要的结果里,a.t 有等于 b 的,这个是你想要的吗?
作者: opps_zhou 发布时间: 2011-09-08
在使用left jion时,on和where条件的区别如下:
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
select * from test a
left join test1 b
on a.id = b.id and a.t = 'a'
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
select * from test a,test1 b
where a.id=b.id(+)
and a.t = 'a';
和
select * from test a
left join test1 b
on a.id = b.id
where a.t = 'a'
一样
作者: reg13141 发布时间: 2011-09-08
你仔细看过了,a.t=b的也是需要的,左表所有data都需要
作者: rainxies 发布时间: 2011-09-08
作者: rainxies 发布时间: 2011-09-08
select a.id, a.t, decode(a.t, 'a', b.id) as b_id from test a, test1 b where a.id = b.id(+);
作者: opps_zhou 发布时间: 2011-09-08
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28