我有一个表,我想要删除所有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的任何实例。
谢谢
答案 0 :(得分:3)
这可能有帮助:
DELETE FROM yourtable
WHERE house_id NOT IN(SELECT house_id
FROM yourtable
WHERE Pet = 'dog')
子查询将重新启动那些具有宠物house_id
和dog
子句的not in
将确保除了这些之外的删除。
注意:如果您要同时从houses
和house_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'
)
然而,这是一个奇怪的计划。一旦这些记录消失,你就不能再使用它们了。另一个选择是保留您的记录,只需选择那些有宠物狗的记录。