日期:2014-05-18  浏览次数:20589 次

请教,delete语句
在表A中 有些条目有约束,有的条目中不存在约束
由于表记录上万条,无法直接区分哪些是有约束,那些不存在约束的

我想这样这样是否能实现,就是当语句执行到约束条目的时候忽略 ,就继续删除下一条记录,谢谢!


表A 

检查号 检查套餐 用户
001 a1 W
002 a2 S
003 a1 Z
004 a3 Y
005 a8 X
006 b10 O
....

------解决方案--------------------
SQL code
DELETE A1
FROM A A1
WHERE NOT EXISTS (
  SELECT 1
  FROM B
  WHERE B.连接字段 = A1.连接字段
  )

------解决方案--------------------
以上语句删除无约束数据,自己确定是否可以执行
------解决方案--------------------
LZ的约束指的是什么东西
------解决方案--------------------
直接加上个where 条件?
------解决方案--------------------
探讨

引用:

LZ的约束指的是什么东西


表与另一表存在关联数据

------解决方案--------------------
楼主的意思是如果本表与其他表有关联记录就不删除是伐,是的话那就:
SQL code

--方法1
delete 
from a
from table1 as a inner join table2 as b on a.id<>b.id
--id是两表之间的关联字段

--方法2
delete 
from table1 where id not in (select id from table2)

------解决方案--------------------
上面的都已经给出了问题的答案了,不知道楼主是不是所要的结果!
------解决方案--------------------
那就不好办了,连你自己都不知道约束的字段,那怎么叫sql给你判断哪条记录该删除哪条不该删除呢?

那只好问涉及数据库的人了!
------解决方案--------------------
楼主,约束是列概念,你那个题目有点像是把它转成行的概念了。
我说一下我觉得你的意思中处理方法
2008以后(以前的我不清楚,因为我在用2008),有一个CONTAINS 的函数,具体用法看联机丛书,你就检查这个函数返回的是否为true就可以知道有没有约束了。
------解决方案--------------------
可以做到,时间问题,给你一个思路,需要做一段t-sql
一、你把表a复制一个到表b。
二、用try
先取出记录id号,一条一条记录的删,用try,如果删除失败,就在表b中标上该条记录是关联的,不能删除。
这样,就取出了关联的记录。