关于sqlserver left join 的机制

张恕鑫 发布于 2013/05/08 11:59
阅读 1K+
收藏 0

Linux基金会开源软件大学开源技术公开课即将上线,Kubernetes1.19实战讲解!>>>

有两张表A(aid int,bid nvarchar(10));B(bid int,desc nvarchar(100))

A中有一条记录(1,'aaa');B中有一条(1,'desc1')

select A.* from A left join B on A.bid = B.bid(不会报错,查询出来一条结果)

select A.*,B.desc from A left join B on A.bid = B.bid(报错:在将 nvarchar 值 'desc1' 转换成数据类型 int 时失败)

select A.* from A left join B on A.bid = B.bid where B.desc = 'desc1'(不会报错但是没有结果)

select A.* from A inner join B on A.bid = B.bid(报错:在将 nvarchar 值 'desc1' 转换成数据类型 int 时失败)

数据错误是肯定的,但是就是不理解为什么在left join 的时候,如果查询字段中不添加B表字段就不报错,where条件里面添加B表的字段也不会报错,而inner join 就会报错。

希望大神门不吝赐教,谢谢了!

加载中
0
J
JZY_Tomcat

LZ,请注意一个问题 【有两张表A(aid int,bid nvarchar(10));B(bid int,desc nvarchar(100))  A中有一条记录(1,'aaa');B中有一条(1,'desc1')】

select A.*,B.desc from A left join B on A.bid = B.bid

 A表中的bid 为NVACHAR(20),B表中的bid 为 int类型    

如果如LZ那样写是需要转换的select A.*,B.desc from A left join B on A.bid =cast( B.bid as varchar(20)) 这样则没有问题了。同理Inner Join 也是一样的问题。

Left join 是以左边表为基准。Inner JOIN 是必须满足左右两边。

返回顶部
顶部