繁体   English   中英

“ in”子句中的“ where”条件不起作用

[英]'where' condition doesn't work in 'in' clause

我有以下三个表

Orders [orderNo int]
OrderDetails [orderNo int , qty int]
StoreDocuments [docNo int, systemKey nvarChar(20)]

当我执行以下查询以获取没有任何StoreDocuments订单时,出现此错误

转换nvarchar值'。'时转换失败。 数据类型为int

码:

Select 
    Sum(Dt.Qty) as SumQty
From
    Orders as [Or] 
inner join 
    OrderDetails as Dt on [Or].orderNo  = Dt.orderNo 
Where  
    [Or].orderNo NOT IN (Select SystemKey 
                         From StoreDocuments 
                         Where SystemKey <> '.')

如果StoreDocuments中没有systemKey值为'.'记录, StoreDocuments引发错误'.'

我的问题是,为什么内部查询where systemkey <> '.'的where子句where systemkey <> '.' 无法按预期执行,并导致引发错误?

出现异常的原因是SQL Server尝试将您的orderNo与任何SystemKey条目匹配。 它通过在比较之前将SystemKey条目转换为int来实现。 您输入的一项是不可转换的,即它不是数字,因此您会得到例外。

该怎么办? orderNo转换为orderNo ,然后一切都会好起来的

Select Sum(Dt.Qty) as SumQty
  From Orders o 
       inner join OrderDetails as Dt
         on o.orderNo  = Dt.orderNo 
 Where cast(o.orderNo as NVarChar) Not IN
   (
     Select SystemKey From StoreDocuments Where SystemKey <> '.'
   )

这应该为您工作:

Select Sum(Dt.Qty) as SumQty

From

Orders as [Or] inner join OrderDetails as Dt

on [Or].orderNo  = Dt.orderNo 

Where  cast([Or].orderNo as nvarchar(20))  Not IN

(

     Select SystemKey From StoreDocuments Where SystemKey <> '.'

)

sql小提琴

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM