| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1483 人关注过本帖
标题:如何实现集合间的“ - ” ???
只看楼主 加入收藏
gsb803
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2005-2-24
收藏
 问题点数:0 回复次数:12 
如何实现集合间的“ - ” ???
两个表:a表包含b表(即b表是a表的一部分),要是想从a表中选取不包含b表的数据(也就是a-b),请问sql语句如何设计?

我是新手,开始以为用连接可以搞定,但是后来发现这是集合查询而不是连接查询,我从一些资料中看到介绍有关于集合查询的关键词有union(并), except(差),忘了(交),(select * from a) except  (select * from b),结果不行!

亲高手指教!!谢谢!!
搜索更多相关主题的帖子: sql语句 关键词 except 
2005-02-24 17:10
volte
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:69
帖 子:1167
专家分:1316
注 册:2004-12-19
收藏
得分:0 
用非操作
或者析取操作。

大家都是朋友,有空就来坐坐!
2005-02-24 22:48
gsb803
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2005-2-24
收藏
得分:0 

多谢斑竹的回复,但是具体如何操作呢?

更大的问题是遇到的具体问题却好像不是那么好解决,数据源是重某信息管理系统中抽取出来的,以MS-EXCEL的格式导出,再导入MS-SQLServer2000,所得数据表根本不符合数据库设计的范式要求。

例如数据源a表:

编码 名称 费用所属期 费用发生日期 金额 申请日期 …… 003…… 004 办公用品 2004-09-01 2004-09-30 250 2004-10-28 004 办公用品 2004-09-02 2004-09-30 250 2004-10-28 005 差旅费 2004-09-01 2004-09-30 300 2004-10-28 005 差旅费 2004-09-01 2004-09-30 300 2004-10-29 006 水电费 2004-08-01 2004-08-01 2000 2004-09-03 007…… ……

b表是:

编码 名称 费用所属期 费用发生日期 金额 申请日期 004 办公用品 2004-09-02 2004-09-30 250 2004-10-28 005 差旅费 2004-09-01 2004-09-30 300 2004-10-28

a表的意义是所有需要清算的项目,而b表记载的项目是已经清算完毕,现在需要做的是要统计出还没有清算的项目,及其详细资料,简单的说就是找出集合c = a - b。

再次请教斑竹和高手们!谢谢!

2005-02-25 15:19
gsb803
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2005-2-24
收藏
得分:0 
谁来帮下忙?
顶啊!
2005-02-28 09:31
卜酷塔
Rank: 7Rank: 7Rank: 7
来 自:魅力青岛
等 级:禁止访问
威 望:39
帖 子:2569
专家分:0
注 册:2004-6-12
收藏
得分:0 
select *
from a
where 编码 not in('004','005','006')
这种情况只适合在编码唯一的情况下使用奥!

觉得为时已晚的时候,恰恰是最早的时候。

2005-03-01 10:22
snowkisss
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2005-1-3
收藏
得分:0 
select *
 from a
 where 编码 not in (select 编码
                                  from b)

十年渺渺 万里遥 浪身天际枉自嘲 幻梦为汝消 风仍啸 情难长 归途茫茫夕阳桥 不见伊人笑 ------遥遥等待 只叹芳心难求
2005-03-03 17:34
snowkisss
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2005-1-3
收藏
得分:0 
也就是说
  这个不是靠算术运算的
   要用嵌套子查询
      当然  也有个运算的
     不过 我不记得了
          回去看看资料再答复你咯

十年渺渺 万里遥 浪身天际枉自嘲 幻梦为汝消 风仍啸 情难长 归途茫茫夕阳桥 不见伊人笑 ------遥遥等待 只叹芳心难求
2005-03-03 17:45
snowkisss
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2005-1-3
收藏
得分:0 
我想过了  没有别的方法了
    2楼说的非运算
  根本不可以在这里实现
   因为 非是单目运算符
     不可以用在这里
      

十年渺渺 万里遥 浪身天际枉自嘲 幻梦为汝消 风仍啸 情难长 归途茫茫夕阳桥 不见伊人笑 ------遥遥等待 只叹芳心难求
2005-03-03 17:56
gsb803
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2005-2-24
收藏
得分:0 
谢谢回复的朋友们
2005-03-08 09:47
gsb803
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2005-2-24
收藏
得分:0 
刚才试过:
select a.*
from a,b
 where a.编码<>b.编码  and a.名称<>b.名称
...................
是不行的
2005-03-08 11:49
快速回复:如何实现集合间的“ - ” ???
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032949 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved