日期:2014-05-18  浏览次数:20540 次

请教:left join

SQL code

--测试数据
CREATE table t1 (Id_1 int primary key identity,ch_1 varchar(20))
insert into t1
select '0123' union
select '1124' union
select '1125' union
select '1126' union
select '2012-1127'
insert into t1 values ('2012-1127')
CREATE table t2 (Id_2 int primary key identity,ch_1 varchar(20),ch_2 varchar(20))
insert into t2
select 'SP1204001','1124' union
select 'SP1204002','1126' union
select 'SP1204003','1125' union
select 'SP1204004','2012-1127'
select * from t2
left join t1 on t2.ch_2=t1.id_1

--结果

服务器: 消息 245,级别 16,状态 1,行 1
将 varchar 值 '2012-1127' 转换为数据类型为 int 的列时发生语法错误。



------解决方案--------------------
CREATE table t1 (Id_1 int primary key identity,ch_1 varchar(20))
insert into t1(ch_1) --插入的列名要带上的
select '0123' union
select '1124' union
select '1125' union
select '1126' union
select '2012-1127'

insert into t1(ch_1) --插入的列名要带上的
values ('2012-1127')
------解决方案--------------------
SQL code

--推理妞,连接查询的时候,字段对应的不对
CREATE table t1 (Id_1 int primary key identity,ch_1 varchar(20))
insert into t1
select '0123' union
select '1124' union
select '1125' union
select '1126' union
select '2012-1127'
insert into t1 values ('2012-1127')

CREATE table t2 (Id_2 int primary key identity,ch_1 varchar(20),ch_2 varchar(20))
insert into t2
select 'SP1204001','1124' union
select 'SP1204002','1126' union
select 'SP1204003','1125' union
select 'SP1204004','2012-1127'

select * from t2
left join t1 on t2.ch_2=t1.ch_1
/*
Id_2        ch_1                 ch_2                 Id_1        ch_1
----------- -------------------- -------------------- ----------- --------------------
1           SP1204001            1124                 2           1124
2           SP1204002            1126                 4           1126
3           SP1204003            1125                 3           1125
4           SP1204004            2012-1127            5           2012-1127
4           SP1204004            2012-1127            6           2012-1127
*/

------解决方案--------------------
原来的是连接条件是int 字段对应 varchar 类型字段了。
如果不想让它报错也是可以的。
SQL code

select * from t2
left join t1 on t2.ch_2=LTRIM(t1.id_1)
/*
Id_2        ch_1                 ch_2                 Id_1        ch_1
----------- -------------------- -------------------- ----------- --------------------
1           SP1204001            1124                 NULL        NULL
2           SP1204002            1126                 NULL        NULL
3           SP1204003            1125                 NULL        NULL
4           SP1204004            2012-1127            NULL        NULL
*/

------解决方案--------------------