sql server下的*= 不等价与Oracle下的(+)
create table t_test1(
col1 varchar(10),
col2 varchar(10),
col3 varchar(10))
go
insert into t_test1 values('1','a','11')
insert into t_test1 values('2','b','22')
insert into t_test1 values('3','c','33')
go
create table t_test2(
col4 varchar(10),
col5 varchar(10),
col6 varchar(10))
go
insert into t_test2 values('1','a','aa')
insert into t_test2 values('2','b','bb')
insert into t_test2 values('4','d','dd')
go
以下两句是等价的
Sql Server下:
select * from t_test1,t_test2 where col1 *= col4
Oracle下:
select * from t_test1,t_test2 where col1 = col4(+)
以下两句是不等价的
Sql Server下:
select * from t_test1,t_test2 where col1 *= col4 and col4 = '4'
Oracle下:
select * from t_test1,t_test2 where col1 = col4(+) and col4 = '4'
但是以下这句是等价的(因为是sql-92语法)
select * from t_test1 left outer join t_test2 on col1 = col4
where col5 = 'b'
造成这种情况的原因是,SQL Server对*=的解释发生了歧义.在说明文件中,SQL Server表示此语法有可能造成歧义,建议使用SQL-92标准语法,并提示将在以后可能会放弃该语法