查询A表的数据,在B表内不存在

huangyunyun__ 2014-03-07 11:57:39
我现在有一个表vsmark --单证使用明细表(visacode-单证类型代码、VisaSerialNo-单证流水号、flag-标志位) 与vsdossier--归档登记表(VisaCode-单证类型代码、StartSerialNo-起始流水号、EndSerialNo-终止流水号)

如何查询vsdossier--归档登记表中的StartSerialNo-起始流水号、EndSerialNo-终止流水号 这个区间内的数据不在vsmark --单证使用明细表中的VisaSerialNo-单证流水号 字段内存在,且满足flag-标志位 not in('0','1');
这是我写的sql,但是总感觉不对,请哪位大神帮忙看看,谢谢啦!!小女子感激不尽!祝好人一生平安!
select p.visacode, p.visaserialno
from ywuser.vsmark p,
(select p.visacode, p.visaserialno
from ywuser.vsmark p, ywuser.vsdossier a
where p.visacode = a.visacode
and p.flag not in ('0', '1')
and p.visaserialno >= a.startserialno
and p.visaserialno <= a.endserialno) b
where p.visacode = b.visacode
and p.visaserialno <> b.visaserialno
and p.flag not in ('0', '1');
...全文
236 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wad12302 2014-03-07
  • 打赏
  • 举报
回复
oracle
wad12302 2014-03-07
  • 打赏
  • 举报
回复
select * from vsdossier vr where 1 = 1 and exists (select 1 from vsmark vk where vk.visaserialno >= vr.startserialno and vk.visaserialno <= vr.endserialno and vk.flag not in ('0', '1') and vk.visacode = vr.visacode) 题目内后面意思没看明白
yx3092187 2014-03-07
  • 打赏
  • 举报
回复
select * from ywuser.vsdossier vsd
           where startserialno not in(select visaserialno 
                                        from ywuser.vsmark vsm
                                       where vsd.visacode = vsm.visacode
                                         and flag not in ('0', '1'))
             and endserialno not in(select visaserialno 
                                      from ywuser.vsmark vsm
                                     where vsd.visacode = vsm.visacode
                                       and p.flag not in ('0', '1'))
缘来一场梦 2014-03-07
  • 打赏
  • 举报
回复
引用 6 楼 immrma 的回复:
select v.* from vsmark where v.flag not in ('0','1') and v.VisaSerialNo not between (select v2.StartSerialNo from vsdossier v2 where v2.visacode = v.visacode) and (select v2.EndSerialNofrom vsdossier v2 where v2.visacode = v.visacode)
第一行vsmark后面忘加上 as v 了
缘来一场梦 2014-03-07
  • 打赏
  • 举报
回复
select v.* from vsmark where v.flag not in ('0','1') and v.VisaSerialNo not between (select v2.StartSerialNo from vsdossier v2 where v2.visacode = v.visacode) and (select v2.EndSerialNofrom vsdossier v2 where v2.visacode = v.visacode)
缘来一场梦 2014-03-07
  • 打赏
  • 举报
回复
where子句里用NOT BETWEEN StartSerialNo AND EndSerialNo排除区间内存在的流水号
ay转身遇 2014-03-07
  • 打赏
  • 举报
回复

select p.visacode, p.visaserialno
  from ywuser.vsmark p,
       (select p.visacode, p.visaserialno
          from ywuser.vsmark p, ywuser.vsdossier a
         where p.visacode = a.visacode
           and p.flag not in ('0', '1')
           and p.visaserialno >= a.startserialno
           and p.visaserialno <= a.endserialno) b //这个是区间的数据
 where p.visacode = b.visacode
   and p.visaserialno <> b.visaserialno
   and p.flag not in ('0', '1');
这样写不可以么? 我感觉可以啊。不过最后一句and p.flag not in ('0', '1');应该不用加吧?
xiangwei5385315 2014-03-07
  • 打赏
  • 举报
回复
StartSerialNo-起始流水号、EndSerialNo-终止流水号 字段的值是一个区间还是什么?

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧