如果我在提到 t.contractid=111111
在 select
声明。请告诉我如何解决这个问题。
select t.contractid,r.contractid,t.batchno
from tableA t
left join tableB r
on t.contractid=r.contractid and t.PayGrp=r.PayGrp and t.PriNo=r.PriNo
where t.contractid=111111 and t.PayGrp=0 and t.batchno=201701 and t.prino=3
and r.contractid is null
样本输出:
null null 201701
null null 201701
null null 201701
null null 201701
null null 201701
3条答案
按热度按时间zvms9eto1#
查看您的查询并根据查询做出假设您正在报告的结果将是不可能的,这意味着发生了一些不可能的事情。
为什么?这是不可能的
r.contractid is null
以及r.contractid = t.contractid
以及t.contractid=111111
对所有人的评价都是正确的。然而,您的查询正在询问数据库这个问题,它正在返回结果。解释结果的唯一方法是tablea.contracd和tableb.contracd有一个自定义数据类型,其中比较这些数据类型会得到等于111111的空值。类似地,paygrpt.paygrp将需要一个数据类型,将null与0进行比较将计算为true。当然,只有查看表的数据定义才能告诉我们这一点。
也就是说,我在join语句中遇到了列匹配的奇怪结果,其中一方或另一方为null。因此,在考虑其他可能性之前,请尝试在isnull()中 Package join和where条件:
如果上面的查询仍然产生相同的结果,那么您将处理某种系统错误,例如损坏的数据库(或该数据库的内存缓存)或者更不可能的硬件错误。首先尝试重新启动数据库服务器和执行查询的客户机(如果它们不相同),如果重新启动后错误仍然存在,请尝试将数据移动到其他数据库/db服务器并执行相同的查询。此时,您将知道您的数据库是否已损坏,或者在数据库服务器上遇到系统错误。
gojuced72#
您正在限制您的查询
r、 contracid为空
因此,它只返回空记录-您看到的结果是预期的。
nbnkbykc3#
这是您的问题:
结果集总是以
111111, NULL
,基于WHERE
条款。t.contractid
必须有价值。确定表别名正确吗?那就是where
子句是否正确?