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

Модераторы: kdv, CyberMax

Ответить
Guardian
Сообщения: 35
Зарегистрирован: 07 авг 2008, 12:05

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

Сообщение Guardian » 23 окт 2008, 20:04

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.
Кто - нибудь сталкивался с такой ситуацией ?
Заранее благодарен за ответ

RedAndBlack
Сообщения: 24
Зарегистрирован: 16 авг 2007, 07:18

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

Сообщение RedAndBlack » 24 окт 2008, 07:04

тебе во вложенном селекте нужно выбрать только "SOTEL.ID". а тут ты сразу несколько столбцов сравниваешь с одним.

Antoxa
Сообщения: 169
Зарегистрирован: 06 июл 2006, 10:53

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

Сообщение Antoxa » 24 окт 2008, 11:27

А как-нибудь так
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)

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

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

Сообщение WildSery » 24 окт 2008, 11:47

Коробит от таких "запросов". Хочется послать читать Грабера (он же Грубер).

Ты вот представляешь себе, что такое 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)

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

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

Сообщение Merlin » 24 окт 2008, 13:04

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

Guardian
Сообщения: 35
Зарегистрирован: 07 авг 2008, 12:05

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

Сообщение Guardian » 24 окт 2008, 16:40

Спасибо всем за ответы

Ответить