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

Вниз

Коррелированный запрос UPDATE   Найти похожие ветки 

 
SP   (2009-03-20 18:26) [0]

Нужно написать запрос типа этого (этот не работает):


UPDATE card s
  SET s.form =
         (SELECT fr
            FROM (SELECT a.code AS code, d.code AS fr
                    FROM card a, org b, form c, form d
                   WHERE a.cardyear = 2009
                     AND a.idorg = b.code
                     AND d.charcode = CONCAT ("J", SUBSTR (c.charcode, 2, 7))
                     AND a.form = c.code
                     AND SUBSTR (c.charcode, 1, 1) = "F"
                     AND b.jur = 1) k
           WHERE k.code = s.code)


получаю сообщение об ошибке:
[1]: (Error): ORA-01407: cannot update ("BESTZVIT"."CARD"."FORM") to NULL

если упросить запрос для лучшего понимания народом, это будет выглядеть как

update table1 a set a.field1=(select b.field1 from table2 b where b.field2=a.field2)

проблема в том, что для отдельных записей table1 подзапрос select может выдавать пустой набор данных.

Посоветуйте, как обойти проблему в данном случае.



 
SP   (2009-03-20 18:37) [1]

Пока получилось сделать таким образом:

UPDATE card s
  SET s.form =
         (SELECT fr
            FROM (SELECT a.code AS code, d.code AS fr
                    FROM card a, org b, form c, form d
                   WHERE a.cardyear = 2009
                     AND a.idorg = b.code
                     AND d.charcode = CONCAT ("J", SUBSTR (c.charcode, 2, 7))
                     AND a.form = c.code
                     AND SUBSTR (c.charcode, 1, 1) = "F"
                     AND b.jur = 1) k
           WHERE k.code = s.code)
WHERE EXISTS (
         SELECT fr
           FROM (SELECT a.code AS code, d.code AS fr
                   FROM card a, org b, form c, form d
                  WHERE a.cardyear = 2009
                    AND a.idorg = b.code
                    AND d.charcode = CONCAT ("J", SUBSTR (c.charcode, 2, 7))
                    AND a.form = c.code
                    AND SUBSTR (c.charcode, 1, 1) = "F"
                    AND b.jur = 1) k
          WHERE k.code = s.code)


но это как-то сильно мутно получается...
нельзя ли попроще?


 
Кролик Иа-Иа ©   (2009-03-20 21:46) [2]


> update table1 a set a.field1=(select b.field1 from table2
> b where b.field2=a.field2)проблема в том, что для отдельных
> записей table1 подзапрос select может выдавать пустой набор
> данных.Посоветуйте, как обойти проблему в данном случае

where exists (select b.field1 from table2 b where b.field2=a.field2)


 
Коммуноцентрист1   (2009-03-20 21:57) [3]

можно через merge сделать
merge into table1 a
using (select b.field1 from table2 b)
on (b.field2=a.field2)
when matched then update


 
Anatoly Podgoretsky ©   (2009-03-23 09:11) [4]

> SP  (20.03.2009 18:26:00)  [0]

Если NULL то заменить на что то или разрешить вставлять NULL


 
Коммуноцентрист1   (2009-03-23 10:25) [5]


> Anatoly Podgoretsky ©   (23.03.09 09:11) [4]

не учи плохому


 
Кщд   (2009-03-26 10:52) [6]

>SP   (20.03.09 18:26)  
используйте nvl

>Коммуноцентрист1   (20.03.09 21:57) [3]
это Вы учите плохому)
в использовании merge, в данном случае, нет никакой нужды


 
Коммуноцентрист1   (2009-03-26 10:57) [7]


> Кщд   (26.03.09 10:52) [6]

некуда тут nvl запихать


 
Кщд   (2009-03-27 08:41) [8]

>Коммуноцентрист1   (26.03.09 10:57) [7]


UPDATE card s
 SET s.form =
        nvl((SELECT fr
           FROM (SELECT a.code AS code, d.code AS fr
                   FROM card a, org b, form c, form d
                  WHERE a.cardyear = 2009
                    AND a.idorg = b.code
                    AND d.charcode = CONCAT ("J", SUBSTR (c.charcode, 2, 7))
                    AND a.form = c.code
                    AND SUBSTR (c.charcode, 1, 1) = "F"
                    AND b.jur = 1) k
          WHERE k.code = s.code), s.form)


 
SP   (2009-03-30 17:29) [9]


> Кщд   (27.03.09 08:41) [8]


Хм. как-то не подумал раньше про это...



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

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

Наверх




Память: 0.47 MB
Время: 0.061 c
15-1267705960
Kolan
2010-03-04 15:32
2010.08.27
Где взять справку по TMaskEdit?


2-1270059753
Perseus
2010-03-31 22:22
2010.08.27
Алгоритмы и типы


15-1275560855
Kerk
2010-06-03 14:27
2010.08.27
В России стартует эксперимент по имитации полета на Марс


3-1239773025
Spot
2009-04-15 09:23
2010.08.27
Interbase через BDE


15-1273854592
Дмитрий С
2010-05-14 20:29
2010.08.27
Проверьте в Delphi 7.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский