其中PACKAGE 为主表,package_id为num型自增ID。package_id被一堆表引用。我要找出所有没有被引用的package_id。
在Oracle下用这句是对的。
select package_id  from PACKAGE where package_id not in(
     select package_id  from PACKAGE where package_id in
     (
     select package_id from CLAIM
     union
     select package_id from LAWCASE
     union
     select package_id from MEETINGS
     union
     select package_id from WORK_PLAN_SUM
     union
     select package_id from WORK_REPORT
     union
     select package_id from ORG_PDUTY
     union
     select package_id from ORGANIZE
     union
     select package_id from FILE_ASSIGN
     )
)
但是上面的SQL太难看了。我又直接把NOT写到里面
select package_id  from PACKAGE where package_id not in(
     select package_id from CLAIM
     union
     select package_id from LAWCASE
     union
     select package_id from MEETINGS
     union
     select package_id from WORK_PLAN_SUM
     union
     select package_id from WORK_REPORT
     union
     select package_id from ORG_PDUTY
     union
     select package_id from ORGANIZE
     union
     select package_id from FILE_ASSIGN
)
结果在Oracle里执行,在有些数据下结果对。有时结果竟出错。:(
打个比方比如一共3条记录,1,2,3 ,其中1,2被外键引用。结果有时会查出
被用引的ID为
-----
1
-----
2
-----
空格
-----
然后没有被引用的为
-----
空格
-----
吐血。不过后来自己造了一批数据又没测出这个问题。我真想不通怎么会查出有空格这种记录。数据库完整性施加的够严格了。怎么可能会出现num型的package_id里查出空格。但是记录里我查了一下真的没有空行呀。早上这句SQL差点删掉一批有用的数据


posted on 2004-06-14 15:06  使名扬  阅读(508)  评论(0编辑  收藏  举报