其中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差点删掉一批有用的数据
在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差点删掉一批有用的数据