以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- SQL not in语法请教 (http://foxtable.net/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没有关系 |