Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.05.15;
Скачать: [xml.tar.bz2];

Вниз

Ступенчатое удаление   Найти похожие ветки 

 
MsGuns   (2003-04-24 18:33) [0]

Или "закат солнца вручную". В принципе надо сделать каскадное удаление в таблицах, где оно не определено в метаданных.

Итак, есть 4 таблицы, организующие иерархию наподобие дерева.

0-й (высший) ур. NOUT - накладные отгрузки (Key: NID)
1-й ур. - фактура отгружаемых изделий (Key: NPID, Link:NID)
2-й ур. - списание видов матер-в в изд. (Key: NPNID, Link:NPID)
3-й ур. - списание мат-лов с приходов (Key: NPNMID, Link:NPNID)

Везде определены ForegnKey для "родительских" ключей.
Удалять надо, ессно, сначала из 3-й, затем из 2-й и т.д.
Сделать надо запросами (не ХП и не триггерами), т.е. не правя метаданные.

Обломался на первом же (самом многоэтажном):

DELETE FROM nout_pm PM
WHERE PM.npnid=
(SELECT PN.npnid FROM nout_pn PN
WHERE PN.npid=
(SELECT P.npid FROM nout_p P
WHERE P.nid=:pNID)
)


Кричит, что множественность в единственной выборке. Вставка после вложенных Select`ов "DISTINCT" ничего не меняет.
Используется FB 1.0 (V6.2)

Понимаю, что дурак, но не знаю почему ;)))



Благодарю всех откликнувшихся !


 
KoluChi   (2003-04-24 18:37) [1]

может попробовать вместо WHERE PM.npnid=
WHERE PM.npnid IN (



 
MsGuns   (2003-04-24 18:38) [2]

SELECT * FROM nout_pm PM
WHERE PM.npnid=
(SELECT PN.npnid FROM nout_pn PN, nout_p P
WHERE (PN.npid=P.npid) And (P.nid=4))

Тоже не пашет.

>KoluChi © (24.04.03 18:37)
Сейчас попробую.


 
Arm79   (2003-04-24 18:55) [3]

попробуй так

DELETE FROM table3 t3
WHERE t3.npnid in
(SELECT t2.npnid FROM table2 t2
WHERE t2.npid in
(SELECT t1.npid FROM table1 t1
WHERE t1.nid in
(select t0.nid from
table0 t0
where t0.nid = :param)
)
)



 
MsGuns   (2003-04-24 19:05) [4]

Прошло и так:

SELECT * FROM nout_pm PM
WHERE PM.npnid in
(SELECT PN.NPNID FROM nout_pn PN
WHERE PN.npid in
(SELECT P.npid FROM nout_p P
WHERE P.nid=4)
)


и так:

SELECT * FROM nout_pm PM
WHERE PM.npnid in
(SELECT PN.npnid FROM nout_pn PN, nout_p P
WHERE (PN.npid=P.npid) And (P.nid=4))


Замена SELECT * на DELETE и все O`k !!!

ВСЕМ ОГРОМНОЕ СПАСИБО !!!

ЗЫ. А ведь мог же и сам догадаться. ;((



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.05.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.008 c
7-47020
Андрей_13
2003-03-20 16:11
2003.05.15
Окно


6-46873
Tolea
2003-03-19 11:21
2003.05.15
Доступ к расшареным ресурсам W2K


3-46645
Skalp
2003-04-24 16:12
2003.05.15
Про транзакции


1-46681
Denich
2003-05-03 16:33
2003.05.15
Проблемы с Random ...


1-46806
Chlavik
2003-05-02 13:42
2003.05.15
А как мне найти компонента по его свойтсву Tag ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский