Главная страница
    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.075 c
15-1263914019
TUser
2010-01-19 18:13
2010.08.27
СШ ГЭС: обледенение


2-1270990762
nikih22
2010-04-11 16:59
2010.08.27
Получить набор байтов с 48 ПИКСЕЛЕЙ


2-1273825369
Elephon
2010-05-14 12:22
2010.08.27
Заполнение listview


2-1272565792
Bee
2010-04-29 22:29
2010.08.27
single and string


15-1271686611
БарЛог
2010-04-19 18:16
2010.08.27
А как будет по-английки...





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