我正在尝试使用标题为“凭证”的字段在同一服务器上连接两个表但使用不同的数据库。这些字段包含完全相同的数据,但存储为不同的数据类型。在表a上,凭证存储为nvarchar,在表b上存储为char。
当我运行我的查询时,我从表b中获得了许多凭证值。如果我分别对表运行查询,我可以看到表b中的值在连接的查询中显示为空。
这里的任何帮助都是巨大的。
答案 0 :(得分:0)
Char类型附加空格以填充列长度。您需要在加入时修剪char字段,如:
left join tableB on rtrim(tableb.voucher) = tablea.voucher
答案 1 :(得分:0)
这两种数据类型应该在大多数数据库中隐式转换。它不会关心char添加的空间。
有时即使数据看起来相同,数据也不一样。请参阅下面的SQL Server代码(我正在显示那些不使用SQl Server的结果集):
创建数据
create table #temp ( id varchar (10))
create table #temp2 (id char(10))
truncate table #temp2
insert into #temp values ('test1')
insert into #temp values ('test' +Char(13))
Insert into #temp2 values ('test1')
insert into #temp2 values ('test')
查询#temp
select * from #temp
返回数据
id
test1
test
查询#Temp2
select * from #temp2
返回数据
id
test1
test
加入查询
select t.id as tid , t2.id as t2id from #temp t
left join #temp2 t2 on t.id = t2.id
返回数据
tid t2id
test1 test1
test NULL
正如您所看到的,如果您运行此操作,那么添加一个不可打印的字符(在这种情况下是一个回车符)会使连接中的值不再匹配。如果表中有这样的数据,那么值就不一样了。为了更具体地修复,我必须知道你正在使用什么数据库后端。