回 帖 发 新 帖 刷新版面

主题:请教下关于两表内容的精确比较

我用下面这条语句
SELECT a.* from cj_第二稿 a,cj_第一稿 b where a.ksbh=b.ksbh and a.ywk2<>b.ywk2

后来发现该语句 对  A 表中 ywk2 原来是null 到 A 表被改成 -1 的情况无效
 
该怎么办?
谢谢指导

回复列表 (共13个回复)

沙发

不知道是不是这个意思:
a.ywk2<>b.ywk2
改成:
iif(isnull(a.ywk2), -1, a.ywk2)<>b.ywk2

板凳

谢谢,楼上的朋友,原先我没表达清楚。我想表达的意思是
 当原表中的字段是 NULL 时,新表相对应的字段无论被改成什么值,均无法被比较。

3 楼

不是的,当原表中的字段是 NULL 时,新表相对应的字段改成-1就能比较了

4 楼

可是我要比较的就是原来和新表的差异
要看原表和新表有何不同
包括原表中原来是 null ,新表中变成 其它值的 情况

5 楼

咱别捉猫猫了,你举些例子

6 楼

请看附件 ,通过查看我们可以看到有2条纪录被修改,但是查询时只能查到一条
附上select语句:
SELECT * from 新 a ,旧 b where a.ksbh=b.ksbh and a.ywk2<>b.ywk2

7 楼

a.ksbh=b.ksbh and (a.ywk2<>b.ywk2 OR ISNULL(b.ywk2))

8 楼

a.ksbh=b.ksbh and (a.ywk2<>b.ywk2 OR ISNULL(b.ywk2))

不是的,我要显示的是两表之间不同数据,而不是b表的 ywk2 isnull
如果 a.ywk2 是 null 和b表一致,用你的语句也会显示出来,事实上这样的纪录我是不需要的

9 楼

'举些例子'——‘些’你应该知道什么意思把?
可你例子只有各3条,能把你的意思表达清楚吗?
把你的情况列清楚可能早就解决了,你再组织下数据放上来?

10 楼

夜间咖啡,哇,不容易睡着。呵呵,玩笑一下。

恰巧俺还知道是怎么回事,说来看看。

NULL——这是个有趣的数据,表示“什么都没有”、“不知道是什么”,既然“不知道是什么”,把它和一个“知道是什么”的数据比较,结果还是“不知道是什么”。好比西瓜和南瓜比谁甜,当然西瓜甜,现在拿西瓜和“不知道是什么”比谁甜,你只能是“不知道是什么”。

说白了,NULL与非NULL数据进行关系运算,结果始终还是NULL。
? NULL>1
? NULL<1
? NULL<>"abc"
? NULL=NULL  &&呵呵,两个NULL
以上结果都是 NULL

当这些表达式作为条件时,我们知道条件应该是“真”、“假”的结果,但是它们的结果是NULL。老狐狸判断时,干脆把“不知道是什么”认为是“假”。

8楼思路正确,不过要补充一点:
a.ksbh=b.ksbh and (a.ywk2<>b.ywk2 OR (ISNULL(b.ywk2) and not ISNULL(a.ywk2)))

我来回复

您尚未登录,请登录后再回复。点此登录或注册