Oracle 关联查不到数据

博主揭示了在关联查询中遇到的问题,发现空格导致数据匹配失败。关键在于CHAR与VARCHAR类型对空格的不同处理:CHAR会填充空格,而VARCHAR不会。解决办法是理解数据类型特性和调整查询条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

测试跟我说,他导入了数据,但是我并没有将数据显示出来。于是我把语句抓了出来,就两个表关联查询数据,我用了left join但是就是没有数据,但两个表单独查询又都有数据,简直见鬼了。其实这种情况,一般就是数据里多了空格之类的。但是我两个表的唯一标识是一样的,就这么一个关联条件,居然还这样,真是够了。

问题

-- a,b 可以理解为Table1,Table2的外号
-- id是a,b表的栏位名称,且两边数据都相等
-- left join...on...去看看数据库的笛卡尔积吧
select b.* from table1 a left join table2  b on a.id=b.id;

CHAR和VARCHAR

后面经发现,确实是数据有问题,但是关键是数据里有空格,可即便这样我用没有空格的查询条件能查出来,用加了空格的也能,就是系统自带把后面的空格去掉了。

一个表建的是CHAR类型,一个是VARCHAR类型的,char类型的查询就自动把后面的屏蔽还是怎么的,反正就是能查出来。

char类型的数据,我建了长度17,但实际值只有16位(有的也有17位),后一位就补空格了;但是VARCHAR不会给你补空格,将长度全占满

总结

如果你的数据长度是固定的,且跟建的栏位长度也是相同的,用CHAR就不会有什么问题,但是你要是不一致,还是用VARCHAR还是VARCHAR2来着,都可以。据说 CHAR和VARCHAR之间有点性能差距,但对我这种能用的人来说,过多的追求性能,可能会导致一堆bug。不过以后慢慢学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值