2014-11-18 3 views
1

У меня есть таблица, в которой я хочу удалить все идентификаторы, а также строки, которые не имеют определенного значения. Например, скажем, у меня есть таблица домов, и у вас есть первичный ключ, называемый house_id, и у меня есть другая таблица с именем house_attributes, которая выглядит примерно так.Удалите все ID, которые не имеют определенного значения

# 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_id 2 будет соответствовать этим критериям, поэтому любой экземпляр house_id 2 будет удален из таблицы.

Спасибо

+0

Согласно вашему приведенному выше примеру home_id из Pet = dog is 1, поэтому, кроме собаки, вы хотите, чтобы другой house_id = 1 удалялся? –

+1

из примера я бы хотел, чтобы строки с dom_id из 2 были удалены, потому что у house_id нет собаки. Так что в основном ничего общего с house_id 2 не было. Так что больше нет Усы или Полли – psycho

ответ

3

это может быть полезно:

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

подзапрос будет Retrun те house_id, которые имеют домашнее животное dog и not in условие гарантирует, что удаление кроме них.

Примечание: если вы хотите удалить из обоих houses и house_attributes то же запрос должен быть запущен на houses таблицу первой затем на house_attributes.

+0

Это сделало трюк. Спасибо, просто дал вам +1. – psycho

+0

Ваш прием :) –

+0

Хотя конструкции «не в» просты и интуитивны, они, как правило, медленны. Будьте осторожны с их использованием. –

1

Этот вид конструкции поможет.

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

Однако, это странный план. Как только эти записи исчезнут, вы больше не сможете их использовать. Другой вариант - сохранить ваши записи и просто выбрать те, у которых есть домашние собаки.

Смежные вопросы