2011-05-30 109 views
1

我需要从表中删除数据。这里是数据的模样(前两列):ms-access EXISTS查询删除行

alex hub 
liza fds 
harry ok 
lena yyy 
liza ok 

我需要一个查询,将删除下列条件的所有行:如果第二列包含"ok"然后删除所有包含该名称的行。

因此所得到的数据集将是:

alex hub 
lena yyy 

,你可以看到被删除的harryliza所有出现。到目前为止,我有以下几点:

delete from table1 where column1 in (
select column1 from table1 where column2='ok') 
+0

您可能不得不使用临时表来保存选择结果 - 在从中进行选择时从表中删除很少正常工作,并且在许多数据库中不允许使用。 – 2011-05-30 17:56:51

+0

@marc我不知道! – baiapooped 2011-05-30 17:58:16

+0

我不知道@马克B的观点是正确的。它当然不适用于Access/Jet/ACE。 – 2011-05-30 22:38:44

回答

2
DELETE FROM Table1 AS t1 
WHERE Exists (
    SELECT t2.column1 
    FROM Table1 AS t2 
    WHERE 
     t2.column2 = "ok" 
     And t2.column1 = t1.column1); 
+0

非常感谢你能告诉我我的方法有什么问题 – baiapooped 2011-05-30 20:20:35

+0

@ user558922我不知道你原来的方法为什么不起作用。但我并不担心,因为你的头衔让我相信你正在寻找一个Exists解决方案。其他人可能会解释为什么'在(SELECT ...)不能与DELETE一起工作,如果你有错误信息,告诉我们它说了什么。 – HansUp 2011-05-30 23:39:36

0

是否有一个原因,你不能做的:

DELETE * 
FROM table1 
WHERE column2 = 'OK' 

+1

因为这会在表中留下liza fds,并且如果有任何记录中名称具有“ok”值的任何记录,OP想要删除具有名称的所有记录。 – 2011-05-30 17:59:17

+0

啊。错过了。糟糕! – XIVSolutions 2011-05-31 04:41:03