以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  SQL not in语法请教  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=140901)

--  作者:foxtablefans
--  发布时间:2019/9/17 12:26:00
--  SQL not in语法请教
我有一段SQL selec t * from{订单明细} where 订单号 not in (selec t 订单号 from{订单})
用来查询订单明细中没有与父表订单同步的明细 但是我手动添加了几个没有父行的记录 这段代码缺不显示任何记录 请教一下哪里有问题 

--  作者:blackzhu
--  发布时间:2019/9/17 13:23:00
--  
没啥问题呀!
--  作者:foxtablefans
--  发布时间:2019/9/17 13:27:00
--  
是呀 我也感觉没问题 但是单独添加的行就是不显示
--  作者:foxtablefans
--  发布时间:2019/9/17 13:35:00
--  
看到这篇文章 
https://www.cnblogs.com/totian/p/7597300.html
改成exist好了

--  作者:ry2an
--  发布时间:2021/8/24 15:15:00
--  
遇到了相同的问题,明明改成IN就能正常运行筛选出存在于订单表中的订单号,但是改成not in就不行,也不报错,就是一行也显示不出来。
--  作者:有点蓝
--  发布时间:2021/8/24 15:50:00
--  
看4楼链接说明,因为有空值,改为not exist用法
--  作者:ry2an
--  发布时间:2021/8/24 15:56:00
--  
绕了一个圈子,解决了。
首先尝试了题主自己回复的EXISTS方法,现在foxtable似乎已经不支持这个函数了,直接报错。
我的解法是 让        {订单} left join {订单明细}
之后加上       WHERE LEN{订单明细}[订单号] IS NULL
为什么要专门用一下长度函数呢?因为左连接后虽然没有对应的订单号,但是在查询表中的{订单明细}[订单号]的空着的格子居然不是NULL。即便用IS NOT NULL的查询条件也可以将其查出来。经过反复试验,使用LEN函数就解决了。

(记得吧链接部分括起来,要不然where就变成了连接中为{订单明细}加的一个条件了)

--  作者:有点蓝
--  发布时间:2021/8/24 16:20:00
--  
EXISTS是可以使用的,这个是数据库自己的功能,除非数据库本身不支持,和foxtable没有关系