--可以 create table testa( a number(11), val varchar2(20)); create table testb( a char(10), val varchar2(20)); insert into testa values(1,'testa'); insert into testb values('1','testb');select a.a,a.val aval,b.val bval from testa a,testb b where a.a=b.a;
SELECT * FROM A; ID NAME ----- ----- 1 1 2 2 3 3 4 4 SELECT * FROM B; ID NAME ----- ----- 1 1 2 2 3 3 4 4 SELECT * FROM A,B WHERE TO_CHAR(A.ID) = B.NAME; ID NAME ID NAME ----------- ----------- 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4
这个关联要发生数据类型的隐式转换,性能效率上来说比较低 可以把number类型转换成char的,注意char的10个长度,如果里面的值没有10个长度,会在后面补空字符的,补到10个长为止可以这样写 select * from a full join b on b.char_file=rpad(a.number_file,10,'')
--可以
create table testa(
a number(11),
val varchar2(20));
create table testb(
a char(10),
val varchar2(20));
insert into testa values(1,'testa');
insert into testb values('1','testb');select a.a,a.val aval,b.val bval
from testa a,testb b
where a.a=b.a;
ID NAME
----- -----
1 1
2 2
3 3
4 4 SELECT * FROM B;
ID NAME
----- -----
1 1
2 2
3 3
4 4 SELECT * FROM A,B WHERE TO_CHAR(A.ID) = B.NAME;
ID NAME ID NAME
----------- -----------
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
这个关联要发生数据类型的隐式转换,性能效率上来说比较低
可以把number类型转换成char的,注意char的10个长度,如果里面的值没有10个长度,会在后面补空字符的,补到10个长为止可以这样写
select * from a full join b on b.char_file=rpad(a.number_file,10,'')