开发者社区> 问答> 正文

关于sqlserver left join 的机制?报错

有两张表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 就会报错。

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

展开
收起
爱吃鱼的程序员 2020-06-22 19:39:57 634 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    LZ,请注意一个问题【有两张表A(aidint,bidnvarchar(10));B(bidint,descnvarchar(100)) A中有一条记录(1,'aaa');B中有一条(1,'desc1')】

    selectA.*,B.descfromAleftjoinBonA.bid=B.bid

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

    如果如LZ那样写是需要转换的selectA.*,B.descfromAleftjoinBonA.bid=cast(B.bidasvarchar(20))这样则没有问题了。同理InnerJoin也是一样的问题。

    Leftjoin是以左边表为基准。InnerJOIN是必须满足左右两边。

    2020-06-22 19:40:13
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PolarDB NL2SQL: 帮助您写出准确、优化的SQL 立即下载
Spark SQL最佳实践 立即下载
低代码开发师(初级)实战教程 立即下载