删除所有没有特定值的ID

时间:2014-11-18 10:55:49

标签: sql sql-server

我有一个表,我想要删除所有ID以及没有特定值的行。例如,假设我有一个房屋表,并且有一个名为house_id的主键,我有另一个名为house_attributes的表,看起来像这样。

#   house_id     Pet      Pet_Name   ...
1   1            cat      tigger
2   1            bird     tweety      
3   1            dog      rover
4   2            cat      Whiskers
5   2            bird     Polly
6   3            cat      Sylvester
7   3            bird     Juno
8   3            dog      Rex

从这张表中删除所有没有宠物狗的house_ids的最佳方法是什么。因此,从上面的示例中,house_id 2将满足该条件,因此将从表中删除house_id 2的任何实例。

谢谢

2 个答案:

答案 0 :(得分:3)

这可能有帮助:

DELETE FROM yourtable
WHERE  house_id NOT IN(SELECT house_id
                       FROM   yourtable
                       WHERE  Pet = 'dog') 

子查询将重新启动那些具有宠物house_iddog子句的not in将确保除了这些之外的删除。

注意:如果您要同时从houseshouse_attributes删除,则应先在houses表格上运行相同的查询,然后再在house_attributes上运行。

答案 1 :(得分:1)

这种结构会有所帮助。

delete from houses
where house_id in
(select house_id
from houses
except
select house_id
from pets
where pet = 'dog'
) 

然而,这是一个奇怪的计划。一旦这些记录消失,你就不能再使用它们了。另一个选择是保留您的记录,只需选择那些有宠物狗的记录。