update & Informix

3 отговора 153 прегледа
#1

update & Informix

Здравейте, имам проблем със заявка, надявам се някой с опит в Информикс да може да помогне.
Заявката е от следния тип:
UPDATE tab1 SET tab1.a = tab2.a FROM tab1, tab2
WHERE tab1.b = tab2.b

Това е заявка, която без никакъв проблем може да се изпълни в MS SQL и също така ето тук се твърди, че може да се изпълни и под Informix DS v.10. Аз обаче работя с по-стара версия и там не минава номера с този синтаксис.
Някой може ли да подскаже?

Отговор
в отговор на Eмa #2

Re: update & Informix


UPDATE tab1
SET tab1.a = (
select tab2.a
FROM tab1, tab2
WHERE tab1.b = tab2.b
)
where .....

При това селекта трябва да връща една единствена стойност.

Отговор
в отговор на NDeu #3

Re: update & Informix

Благодаря за отговора, това беше първото, което опитах, обаче не става, защото "Cannot modify table or view used in subquery" - поради което не можах да измисля как да върна единствена стойност.
Сега ми хрумна да копирам tab1 във временна таблица и да направя join един път в подзаявката към временната таблица и в същото време- в where условието. Което не съм много сигурна дали ще работи, а и едва ли е добро решение...

Отговор
в отговор на NDeu #4

Re: update & Informix

UPDATE tab1

SET tab1.a = (

select tab2.a

FROM tab2

WHERE tab1.b1 = tab2.b2

)

where .....


Ето така вече работи. Update-ваната таблица не трябва да се указва явно в subquery-то, а полетата, по които се прави join трябва да са просто с различни имена. Даже префиксите за имента на таблиците не се указват явно, но тук ги написах за яснота

Отговор