Страница 1 из 1

Удаление или изменение группы записей по условию

Добавлено: 23 окт 2008, 20:04
Guardian
Firebird 1.5 Windows XP pro
Есть запрос
SELECT DISTINCT ELEM.K, ELEM.CEN, ELEM.SCEN,SOTEL.M, SOTEL.ID
FROM ELEM
JOIN SOTEL
ON ELEM.K = SOTEL.K
WHERE (ELEM.ID_TIP = 15)
Требуется удалить все записи из таблицы SOTEL возврашаемые предыдушим запросом

Пробовал прописывать
DELETE FROM SOTEL WHERE ID = (SELECT DISTINCT ELEM.K, ELEM.CEN, ELEM.SCEN,SOTEL.M, SOTEL.ID
FROM ELEM
JOIN SOTEL
ON ELEM.K = SOTEL.K
WHERE (ELEM.ID_TIP = 15))
Он мне выдавал multiple rows in singleton select.
Кто - нибудь сталкивался с такой ситуацией ?
Заранее благодарен за ответ

Re: Удаление или изменение группы записей по условию

Добавлено: 24 окт 2008, 07:04
RedAndBlack
тебе во вложенном селекте нужно выбрать только "SOTEL.ID". а тут ты сразу несколько столбцов сравниваешь с одним.

Re: Удаление или изменение группы записей по условию

Добавлено: 24 окт 2008, 11:27
Antoxa
А как-нибудь так
DELETE FROM
SELECT DISTINCT ELEM.K, ELEM.CEN, ELEM.SCEN,SOTEL.M, SOTEL.ID
FROM ELEM
JOIN SOTEL
ON ELEM.K = SOTEL.K
WHERE (ELEM.ID_TIP = 15)

Re: Удаление или изменение группы записей по условию

Добавлено: 24 окт 2008, 11:47
WildSery
Коробит от таких "запросов". Хочется послать читать Грабера (он же Грубер).

Ты вот представляешь себе, что такое DISTINCT? Каким боком оно для операций с множествами может применятся?
То, что ты хочешь, достигается либо через ж..у (куда ты почему-то инстинктивно пытаешься двигаться), а именно

Код: Выделить всё

delete from sotel
  where id in (select sotel.id
                 from elem
                      join sotel on elem.k = sotel.k
                 where elem.id_tip = 15)
Либо нормальными SQL методами, а именно

Код: Выделить всё

delete from sotel l
  where exists (select * from elem where k = l.k and id_tip = 15)

Re: Удаление или изменение группы записей по условию

Добавлено: 24 окт 2008, 13:04
Merlin
Таки SP-шкой это по любому быстрее будет. Или execut-ом чего-нибудь. И тем эффективней, чем тяжелее select.

Re: Удаление или изменение группы записей по условию

Добавлено: 24 окт 2008, 16:40
Guardian
Спасибо всем за ответы