Запрос на удаление, не пойму почему так работает
От: Аноним  
Дата: 14.02.11 08:09
Оценка:
Запрос выглядит так:

delete from t1
where exists (
select * from t1, t2 
where t1.f1 = t2.f1 
and t1.f2 = t2.f2
)



почему то удаляются все записи из t1, а подзапрос:

select * from t1, t2 
where t1.f1 = t2.f1 
and t1.f2 = t2.f2


Возвращает лишь то, что я хочу удалить из t1.

Почему так? Что поправить? Плииз поясните.
Re: Запрос на удаление, не пойму почему так работает
От: Аноним  
Дата: 14.02.11 08:30
Оценка:
А>Плииз поясните.
в первом запросе поменяй delete на select и поймешь, что запрос выбирает все записи, потому как нет связки с подзапросом
Re: Запрос на удаление, не пойму почему так работает
От: Sshur Россия http://shurygin-sergey.livejournal.com
Дата: 14.02.11 08:56
Оценка: 1 (1) +1
Здравствуйте, Аноним, Вы писали:

А>Запрос выглядит так:


А>
А>delete from t1
А>where exists (
А>select * from t1, t2 
А>where t1.f1 = t2.f1 
А>and t1.f2 = t2.f2
А>)
А>


так delete удаляет все записи для который выражение в where истинно. А так как select внутри exists возвращает набор данных совершенно независимо от delete, то это все равно что написать delete from t1 where exists (select 1)


Я думаю так будет работать:
delete from t1
where exists ( select * from t2 
               where t1.f1 = t2.f1 and t1.f2 = t2.f2 )
Шурыгин Сергей

"Не следует преумножать сущности сверх необходимости" (с) Оккам
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.