2010-06-08 181 views
0

我需要编写一个SQL脚本来选择table1中的一个记录,然后在数据库的其余表中查找。如果它没有找到记录,我需要删除table1中的记录。任何人提供一些示例脚本?SQL删除查询

+0

你能提供你正在尝试做一个更具体的解释? – VeeArr 2010-06-08 14:20:10

+1

你为什么一次只做一个记录? – HLGEM 2010-06-08 14:21:05

+0

最终目标是删除table1中没有相应记录的所有记录吗? – 2010-06-08 14:21:32

回答

3

一个例子

delete table1 
where not exists (select 1 
        from Table2 
        where table1.SomeColumn = Table2.SomeColumn) 
AND table1.SomeColumn = 5 --just an example, 

离开进出,如果你想删除所有从表1中不存在表中的行2

你也可以使用LEFT JOIN或NOT IN

2

喜欢我做的事情:

DELETE table1 
    FROM table1 
WHERE table1.ID NOT IN (
     SELECT RefID FROM Table2 
     UNION 
     SELECT RefID FROM Table3 
     ... 
     ) 

假设REFID是FK对table1.ID。这是你需要的吗?

+0

如果检查多个表格,这将工作得很好。当然,我会让它成为“联盟”。 – 2010-06-08 14:24:42

1
DELETE FROM Table1 WHERE id=10 AND NOT EXISTS (SELECT * FROM Table2 WHERE id=10); 
1

非常普遍,(因为你给了小细节)

Delete Table1 t1 
Where [Criteria to find table1 Record] 
    And Not Exists(Select * From Table2 
       Where pk = t1.Pk) 
    And Not Exists(Select * From Table3 
       Where pk = t1.Pk) 
    And Not Exists(Select * From Table4 
       Where pk = t1.Pk) 
    ... etc. for all other tables 
+0

@VeeArr:我们有一个基于日期时间戳清除所有表中的记录的数据库,但有一个表没有日期时间戳。我需要从这里删除其他地方不存在的记录。 @HLGEM:我不需要一次做一条记录,但我只想要一个基本脚本。我已经做了选择和删除记录存在的地方,但不是相反。我正在查找大约10张桌子。 @Martin Smith:是的。 – jerle78 2010-06-08 14:29:43